root@hat1:~# cat /etc/lsb-release | tail -1 DISTRIB_DESCRIPTION="Ubuntu 10.10" |
gmail SMTP server のセッティングは下記URLに。
http://mail.google.com/support/bin/answer.py?answer=78799
SMTP Server: smtp.gmail.com ポート番号: 465(SSL) or 587(TLS) アカウント : アカウント@gmail.com パスワード: gmailのパスワード SMTP TLS/SSL が必要 |
openssl コマンドで 587 (TLS)に接続確認。
ログイン(Auth PLAIN)は、 アカウント\0アカウント\0パスワード を base64 でエンコードしたもの。
まずはこれを準備。
root@hat1:~# python Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56) [GCC 4.4.5] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import base64 >>> base64.b64encode('アカウント@gmail.com\0アカウント@gmail.com\0パスワード') |
openssl コマンドで送信 -starttls プロトコル
root@hat1:~# openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:587 CONNECTED(00000003) 250 ENHANCEDSTATUSCODES ehlo localhost 250-mx.google.com at your service, 250-SIZE 35651584 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH 250 ENHANCEDSTATUSCODES auth plain base64でエンコードしたもの 235 2.7.0 Accepted mail from: <zzz@gmail.com> 250 2.1.0 OK rcpt to: <xxx@gmail.com> 250 2.1.5 OK data 354 Go ahead hi . 250 2.0.0 OK quit 221 2.0.0 closing connection read:errno=0 root@hat1:~# |
・Postfixの設定
Gamil SMTPの証明書は検証しない設定とする。
saslをインストール
# apt-get install sasl2-bin |
/etc/postfix/main.cf に下記を追加
smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl/gmail_passwd smtp_sasl_type = cyrus relayhost = [smtp.gmail.com]:587 |
main.cf はこんな感じ
root@hat1:~# egrep -v ^# /etc/postfix/main.cf | egrep -v ^$ smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) biff = no append_dot_mydomain = no readme_directory = no smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache myhostname = localhost alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydestination = localhost.localdomain, localhost relayhost = mynetworks = 127.0.0.0/8 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = loopback-only inet_protocols = all smtp_tls_loglevel=1 smtp_tls_security_level=encrypt smtp_sasl_auth_enable=yes smtp_sasl_password_maps=hash:/etc/postfix/sasl/passwd smtp_sasl_security_options = noanonymous smtp_generic_maps=hash:/etc/postfix/generic relayhost=[smtp.gmail.com]:587 |
パスワードのファイルを作成
root@hat1:~# cat /etc/postfix/sasl/passwd [smtp.gmail.com]:587 ユーザ名@gmail.com:パスワード |
ハッシュ化
root@hat1:~# postmap /etc/postfix/sasl/passwd |
再起動
root@hat1:~# /etc/init.d/postfix restart * Stopping Postfix Mail Transport Agent postfix [ OK ] * Starting Postfix Mail Transport Agent postfix [ OK ] root@hat1:~# |
動作確認
sendmail -f 送信元 宛先
root@hat1:~# sendmail -f xxxxxx@gmail.com xxxxxx@gmail.com To: xxxxxx@gmail.com Subject: test hello . |
設定に問題がなければ、Gmail に上記のメールが届く。
下記はPostfixのログ。
Jan 18 11:14:33 hat1 postfix/pickup[3792]: zzzzzzzzzzzzzz: uid=0 from=<root> Jan 18 11:14:33 hat1 postfix/cleanup[3914]: zzzzzzzzzzzzzz: message-id=<20110118021433.zzzzzzzzzzzzzz@localhost> Jan 18 11:14:33 hat1 postfix/qmgr[3793]: zzzzzzzzzzzzzz: from=<root@localhost>, size=281, nrcpt=1 (queue active) Jan 18 11:14:34 hat1 postfix/smtp[3917]: setting up TLS connection to smtp.gmail.com[74.125.127.109]:587 Jan 18 11:14:34 hat1 postfix/smtp[3917]: certificate verification failed for smtp.gmail.com[74.125.127.109]:587: untrusted issuer /C=US/O=Equifax/OU=Equifax Secure Certificate Authority Jan 18 11:14:35 hat1 postfix/smtp[3917]: Untrusted TLS connection established to smtp.gmail.com[74.125.127.109]:587: TLSv1 with cipher RC4-MD5 (128/128 bits) Jan 18 11:14:38 hat1 postfix/smtp[3917]: zzzzzzzzzzzzzz: to=<xxxxxx@gmail.com>, relay=smtp.gmail.com[74.125.127.109]:587, delay=22, delays=16/0.19/2.6/2.6, dsn=2.0.0, status=sent (250 2.0.0 OK xxxxxx xxxxxxx) Jan 18 11:14:38 hat1 postfix/qmgr[3793]: zzzzzzzzzzzzzz: removed |
ファイルの内容を下記コマンドでおくることもできる。
# sendmail zzz@gmail.com < hello.txt |
pythonだとこんな感じかな。smtplib ライブラリを使用する。
# cat send_an_email.py #!/usr/bin/python import smtplib sender = 'zzz@zzz.com' receivers = [ 'xxx@gmail.com' ] message = """From: zzz <zzz@zzz.com> To: xxx <xxx@gmail.com> Subject: test hi """ aaa = smtplib.SMTP('127.0.0.1',25) aaa.sendmail(sender, receivers, message) |
・SMTPオブジェクトを作成
aaa = smtplib.SMTP('127.0.0.1',25)
これが接続先になる。
送信元、宛先、メッセージを定義し、SMTPオブジェクト.sendmail でメールを送信
aaa.sendmail(sender, receivers, message)
・現在のグローバルIPを取得して、その結果をgmailに送信するスクリプト
DDNSでいいじゃんとうい話もあるが、、なんとなくやってみたかったので。。
#!/usr/bin/env python import httplib import re import smtplib # get my current global IP via http conn = httplib.HTTPConnection('checkip.dyndns.org',80,timeout=10) conn.request("GET","/index.html") r1 = conn.getresponse() data1 = r1.read() p = re.compile(r'<.*?>') str1 = p.sub('', data1) f = open('my_IP.txt', 'w') f.write(str1) f.close() # send an email to my gmail sender = 'joe' receivers = [ 'zzz@gmail.com' ] filename = "/root/my_work/my_IP.txt" part1 = """From: joe <joe@zzz.com> To: Shige <zzz@gmail.com> Subject: My current global IP """ file1 = open(filename,"rb") filecontent = file1.read() message = part1 + filecontent aaa = smtplib.SMTP('127.0.0.1',25) aaa.sendmail(sender, receivers, message) |
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.