Python で添付ファイル付きの電子メールを送信する
今日の記事では、Python を使用して添付ファイル付きのメールを送信する方法について説明します。 そのため、メールを送信するための外部ライブラリは必要ありません。 代わりに、SMTP
プロトコルを介してメールが送信されるため、smtplib
という名前のモジュールをインポートして使用します。 どうすればできるか見てみましょう。
Python で添付ファイル付きの電子メールを送信する
Python は、テキスト メッセージを送信するときに、すべてのメッセージ コンテンツを通常のテキストとして扱います。 テキスト メッセージに HTML タグを追加しても、HTML 構文に従って構造化されず、メッセージはプライマリ テキストとして表示されます。
ただし、Python は HTML メッセージをネイティブ形式で送信できます。 したがって、HTMLメールを送信するためにメールを送信するときに、MIME
バージョン、コンテンツタイプ、および文字セットを選択できます.
Python には、smtplib
と呼ばれるパッケージが含まれています。 メールは SMTP
(Simple Mail Transfer Protocol) 経由で送信されます。 メール送信の場合、SMTP
クライアント セッション オブジェクトを生成します。
SMTP
には、正しい (有効な) ソースと宛先の電子メール アドレス、サーバー アドレス、およびポート番号が必要です。 たとえば、Google のポート番号は 587
です。 サーバーのアドレスとポート番号は、使用しているサービスによって変わることに注意してください。 この記事では、Google を使用しています。
まず、メール送信モジュール smtplib
をインポートする必要があります。 また、適応性を高めるために、MIME
(Multipurpose Internet Mail Extension) モジュールも使用しています。
MIME
ヘッダーを使用して、送信者、受信者、およびその他の情報を保存する場合があります。 メールにファイルを添付するには、MIME
も必要です。 メッセージの送信には、Google の Gmail サービスを利用しています。
Google のセキュリティ要件に準拠するために、特定の調整を行う必要があります。 たとえば、次のコードは、そのような設定がない場合、または Google がサードパーティ アプリからのアクセスをサポートしていない場合、機能しない可能性があります。
アクセスを提供するには、Google アカウントで安全性の低いアプリ アクセス設定を指定する必要があります。 さらに、2 段階認証が有効になっている場合、安全性の低いアクセスを使用することはできません。
Python で添付ファイル付きの電子メールを送信する手順
まず、MIME
を作成し、作成した MIME
に送信者、受信者、メール タイトル、添付本文を追加します。 その後、メールに添付されたファイルをバイナリモードで開きます。
添付ファイルについては、ヘッダーを追加し、有効なポート番号 587
で SMTP
セッションを開き、セッションを終了します。
コード例:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
mail_content = """Hello,
This mail is to inform you about Today's meeting.
"""
sender_address = "sender@gmail.com"
sender_pass = "-------"
receiver_address = "receiver@gmail.com"
message = MIMEMultipart()
message["From"] = sender_address
message["To"] = receiver_address
message["Subject"] = "Info about meeting."
message.attach(MIMEText(mail_content, "plain"))
session = smtplib.SMTP("smtp.gmail.com", 587)
session.starttls()
session.login(sender_address, sender_pass)
text = message.as_string()
session.sendmail(sender_address, receiver_address, text)
session.quit()
print("Mail Sent")
出力:
Mail Sent
Python で添付ファイル付きの電子メールを送信する方法の別の例を次に示します。
コード例:
import smtplib
from pathlib import Path
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
import email.utils
from email import encoders
from smtpd import COMMASPACE
def send_mail(
send_from,
send_to,
subject,
message,
files=[],
server="localhost",
port=587,
username="",
password="",
use_tls=True,
):
msg = MIMEMultipart()
msg["From"] = send_from
import email.utils
msg["To"] = COMMASPACE.join(send_to)
msg["Date"] = email.utils.formatdate(localtime=True)
msg["Subject"] = subject
msg.attach(MIMEText(message))
for path in files:
part = MIMEBase("application", "octet-stream")
with open(path, "rb") as file:
part.set_payload(file.read())
encoders.encode_base64(part)
part.add_header(
"Content-Disposition", "attachment; filename={}".format(Path(path).name)
)
msg.attach(part)
smtp = smtplib.SMTP(server, port)
if use_tls:
smtp.starttls()
smtp.login(username, password)
smtp.sendmail(send_from, send_to, msg.as_string())
smtp.quit()
出力:
/Users/apple/PycharmProjects/email/venv/bin/python /Users/apple/PycharmProjects/email/main.py
Process finished with exit code 0
Python でメールを送信するための最初のステップは、Google アカウントの安全性を低くすることです。 そうしないと、接続拒否エラー
が発生します。 機能させるには、2 段階認証 (2FA) が削除されていることを確認してください。
次に、メーリング送信モジュールをインポートする必要があります。有効な送信元と送信先の電子メール アドレスとポート番号が SMTP
に必要です。 たとえば、Google のポート番号は 587
です。
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn