読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

pythonでメール送る その1:Gmail経由_危険編

Gmail + pythonでメール送る方法です。
今回は危険編。
二段階認証を敢えて停止して実施する侠気仕様。
今の私のように、とりあえず動かさないと気分が悪いなんて場合以外はちゃんとセキュリティを意識してやったほうがいいです。

実際のところ

Gmailのセキュリティを敢えて落としに行きます。
アカウントページに行き……
Sign in - Google Accounts
下の方にある「信頼性の低いアプリの可否」っぽい記述を許可にします(デフォでは当然拒否)
f:id:shuzo_kino:20160727223059p:plain

スクリプト本体

# smtplib module send mail

import smtplib

TO = 'target@example.sample'
SUBJECT = 'TEST MAIL'
TEXT = 'Here is a message from python.'

# Gmail Sign In
gmail_sender = 'foobarbuzz@gmail.com'
gmail_passwd = 'XXX'

server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login(gmail_sender, gmail_passwd)

BODY = '\r\n'.join(['To: %s' % TO,
                    'From: %s' % gmail_sender,
                    'Subject: %s' % SUBJECT,
                    '', TEXT])

try:
    server.sendmail(gmail_sender, [TO], BODY)
    print ('email sent')
except:
    print ('error sending mail')

server.quit()

ちゃんと送信できていればターゲットのメールアカウントで以下のような内容をチェックできる筈です。
f:id:shuzo_kino:20160727223459p:plain

"raise SMTPAuthenticationError"と出たら、そのまんま文字通り認証が通ってない

以下の様なエラーが出た場合、セキュリティの解除ができてません。
基本速攻で反映される筈ですが、駄目なら数分まてば通るようになります。

Traceback (most recent call last):
  File "gmail.py", line 16, in <module>
    server.login(gmail_sender, gmail_passwd)
  File "/Users/shuzo_kino/.anyenv/envs/pyenv/versions/3.4.3/lib/python3.4/smtplib.py", line 652, in login
    raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: ...