lost and found ( for me ? )

Send an e-mail to gmaill SMTP server w/ postfix


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.