Python - エメールの送信
こんにちは、Pythonプログラマー志願者の皆さん!今日は、Pythonを使ってエメールを送信するワールドに魅惑の旅を始めましょう。あなたの親しみのある近所のコンピュータ先生として、このプロセスを案内することができて嬉しいです。信じてください、このチュートリアルの最後には、プロのようにエメールを送れるようになるでしょう!
Pythonでのエメール送信
基本から始めましょう。Pythonでのエメール送信は、デジタルの郵便配達人のようなものですが、家々に歩いていく代わりに、smtplib
という特別なPythonライブラリを使います。SMTPはSimple Mail Transfer Protocolの略で、インターネット上でメールを送信する「ルール」を意味します。
以下に簡単な例を示します:
import smtplib
sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "your_password"
message = "Hello, this is a test email from Python!"
with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)
これを分解してみましょう:
-
smtplib
ライブラリをインポートします。 - 送信者のメール、受信者のメール、およびパスワードを設定します。
- 簡単なメッセージを作成します。
- GmailのSMTPサーバーに接続します(後で詳しく説明します)。
- セキュリティのためにTLSを開始します。
- メールアカウントにログインします。
- 最後に、エメールを送信します!
Python smtplib.SMTP() 関数
SMTP()
関数は、デジタルの郵便局の鍵のようなものです。これは、使用したいSMTPサーバーに接続を確立します。以下に詳細を見てみましょう:
import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)
print(server.ehlo())
server.starttls()
print(server.ehlo())
この例では:
- Gmailのサーバー用のSMTPオブジェクトを作成します。
-
ehlo()
はサーバーに「こんにちは」と言うのに似ています。 -
starttls()
はセキュリティのためにTLS暗号化を開始します。
Python smtpd モジュール
smtplib
はエメールを送信するためのものである一方で、smtpd
は受信するためのものです。これは、自分のミニエメールサーバーを設置するのに似ています!以下に簡単な例を示します:
import asyncore
from smtpd import SMTPServer
class EmailServer(SMTPServer):
def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
print(f'Receiving message from: {peer}')
print(f'Message addressed from: {mailfrom}')
print(f'Message addressed to : {rcpttos}')
print(f'Message length : {len(data)}')
server = EmailServer(('localhost', 1025), None)
asyncore.loop()
このコードは、受信したエメールに関する情報を印刷する基本的なエメールサーバーを設定します。これは、自分のパーソナルな郵便整理室を持つようなものです!
Pythonを使ってHTMLエメールを送信
では、いくつかのHTMLを使ってエメールをおしゃれにしましょう:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "your_password"
message = MIMEMultipart("alternative")
message["Subject"] = "multipart test"
message["From"] = sender_email
message["To"] = receiver_email
text = "Hi there! This is a plain text email."
html = """\
<html>
<body>
<p>Hi there!<br>
This is an <b>HTML</b> email.
</p>
</body>
</html>
"""
part1 = MIMEText(text, "plain")
part2 = MIMEText(html, "html")
message.attach(part1)
message.attach(part2)
with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())
この例では、プレーンテキストとHTMLバージョンのエメールを送信します。これは、おしゃれな封筒を使って手紙を送るようなものです!
エメールに添付ファイルを送信
ファイルをエメールと一緒に送りたい場合は、どうですか?問題ありません!以下のようにしてください:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "your_password"
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = "Email with attachment"
body = "This is an email with an attachment."
message.attach(MIMEText(body, "plain"))
filename = "document.pdf" # ファイル名を置き換えてください
attachment = open(filename, "rb")
part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header(
"Content-Disposition",
f"attachment; filename= {filename}",
)
message.attach(part)
with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())
このスクリプトは、ファイルをエメールに添付します。これは、手紙にパッケージを追加するようなものです!
GmailのSMTPサーバーを使ってエメールを送信
このチュートリアルの中で、私たちはGmailのSMTPサーバーを使用してきました。以下に一般的なSMTPサーバーの簡易リファレンス表を示します:
エメールプロバイダー | SMTPサーバー | ポート |
---|---|---|
Gmail | smtp.gmail.com | 587 |
Outlook | smtp-mail.outlook.com | 587 |
Yahoo Mail | smtp.mail.yahoo.com | 587 |
忘れずに、Gmailを使用する場合、"より安全でないアプリのアクセス"を有効にするか、2要素認証が有効な場合は「アプリパスワード」を使用する必要があるかもしれません。
それでは、皆さん!今やPythonのプロとしてエメールを送れるようになりました。大きな力には大きな責任が伴います - 新しいエメール送信スキルを賢く使用してください!ハッピーコーディング、そしてあなたのエメールがいつも届くことを願っています!
Credits: Image by storyset