結論
import smtplib
server = smtplib.SMTP('gmail-smtp-in.l.google.com.', 25) # 接続先サーバー, ポート番号
server.ehlo()
server.mail('example@example.com') # MAIL FROMに指定するアドレス
server.rcpt('example@gmail.com') # RCPT TOに指定するアドレス
~
のような感じで smtplib.SMTP.mail() 、smtplib.SMTP.rcpt() を使えば良さそう。
詳細
smtplib.SMTP.mail()、 smtplib.SMTP.rcpt() を使えば良いらしいが……
smtplibのドキュメント↑には、SMTPの MAIL FROM 、 RCPT TO コマンドを使いたかったら mail() メソッド、 rcpt() メソッドを使えば良いよ〜〜と書いてある↑。
しかし、引数にどんな値を渡せば良いのかなど mail(), rcpt() メソッドの詳細が書かれていない。
[smtplib --- SMTP プロトコルクライアント — Python 3.8.1 ドキュメント
https://docs.python.org/ja/3/library/smtplib.html
]
(https://docs.python.org/ja/3/library/smtplib.html)
inspect.getsource() で実装を見る
import inspect
import smtplib
mail = inspect.getsource(smtplib.SMTP.mail)
rcpt = inspect.getsource(smtplib.SMTP.rcpt)
のような感じで smtplib.SMTP.mail()、smtplib.SMTP.rcpt() のソースコード文字列を取得する。
こんな実装らしい↓
標準ライブラリがPEP8無視してるのはちょっと面白い。
(mail() の x.lower()=='smtputf8' の部分。E225: missing whitespace around operator)
def mail(self, sender, options=()):
"""SMTP 'mail' command -- begins mail xfer session.
This method may raise the following exceptions:
SMTPNotSupportedError The options parameter includes 'SMTPUTF8'
but the SMTPUTF8 extension is not supported by
the server.
"""
optionlist = ''
if options and self.does_esmtp:
if any(x.lower()=='smtputf8' for x in options):
if self.has_extn('smtputf8'):
self.command_encoding = 'utf-8'
else:
raise SMTPNotSupportedError(
'SMTPUTF8 not supported by server')
optionlist = ' ' + ' '.join(options)
self.putcmd("mail", "FROM:%s%s" % (quoteaddr(sender), optionlist))
return self.getreply()
def rcpt(self, recip, options=()):
"""SMTP 'rcpt' command -- indicates 1 recipient for this mail."""
optionlist = ''
if options and self.does_esmtp:
optionlist = ' ' + ' '.join(options)
self.putcmd("rcpt", "TO:%s%s" % (quoteaddr(recip), optionlist))
return self.getreply()
というわけで、mail()、rcpt() の引数には、それぞれ単純に指定したいメールアドレス文字列を渡せば良いっぽい (冒頭に戻る)。