Python - エメールの送信

こんにちは、Pythonプログラマー志願者の皆さん!今日は、Pythonを使ってエメールを送信するワールドに魅惑の旅を始めましょう。あなたの親しみのある近所のコンピュータ先生として、このプロセスを案内することができて嬉しいです。信じてください、このチュートリアルの最後には、プロのようにエメールを送れるようになるでしょう!

Python - Sending Email

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)

これを分解してみましょう:

  1. smtplibライブラリをインポートします。
  2. 送信者のメール、受信者のメール、およびパスワードを設定します。
  3. 簡単なメッセージを作成します。
  4. GmailのSMTPサーバーに接続します(後で詳しく説明します)。
  5. セキュリティのためにTLSを開始します。
  6. メールアカウントにログインします。
  7. 最後に、エメールを送信します!

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