Python初心者向け!メール送信の全てを理解する12ステップ

Pythonのロゴと送信するメールのイラストPython
この記事は約22分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Pythonの力を持って、あなた自身のメール送信システムを構築するのはどうでしょうか?

今日、私たちはPython初心者向けにメール送信の全てを理解するための12ステップについてお話しします。

この記事を読むことで、あなたはPythonを使ってメールを送信する方法を詳しく学ぶことができます。

サンプルコード付きで、Pythonの基礎から応用まで、この1つの記事で完全に理解することができます。

●Pythonとは

Pythonは、読みやすく効率的なコードを書くことを可能にする人気のある高レベルプログラミング言語です。

そのシンプルな文法と優れた可読性は、初心者から経験豊富な開発者まで幅広いユーザーに選ばれています。

●メール送信とPython

Pythonの強力なライブラリエコシステムの一部として、メールを送信するための機能も提供されています。

これにより、Pythonプログラム内から直接メールを送信することができます。

これは、例えば自動化されたレポートの送信や、システムエラーの通知など、様々なシチュエーションで有用です。

●Pythonでメールを送信するために必要な事前準備

メールを送信するためにPythonを使用する前に、いくつかの準備が必要です。

まず、SMTP(Simple Mail Transfer Protocol)サーバーへのアクセス情報が必要です。

これは通常、メールアドレスとパスワード、そしてSMTPサーバーのアドレスとポート番号を含みます。

また、Python環境をセットアップする必要があります。

Pythonの最新バージョンをインストールし、smtplibというライブラリを利用可能にしておきましょう。

このライブラリは、Pythonがメール送信機能を提供するための主要なツールです。

●Pythonのメール送信ライブラリ「smtplib」の概要

○smtplibライブラリとは

smtplibはPythonの標準ライブラリで、SMTPを使ったメール送信を可能にします。

このライブラリを利用することで、プログラムからメールを送信するためのコードを容易に書くことができます。

○smtplibのインストール方法

Pythonの標準ライブラリであるため、Pythonをインストールすればsmtplibも自動的にインストールされます。

特別なインストール手順は必要ありません。

●Pythonを使ったメール送信の基本的な流れ

Pythonでメールを送信する基本的な流れは次のとおりです。

  1. smtplibをインポートする
  2. SMTPサーバーに接続する
  3. SMTPサーバーにログインする
  4. メールを作成する
  5. メールを送信する
  6. SMTPサーバーから切断する

次にこの流れに沿ったサンプルコードとその詳細な解説を見ていきましょう。

○メール送信のサンプルコード1:基本的なメール送信

Pythonを使ったメール送信の基本的な方法について解説します。

ここでは、smtplibというライブラリを使って、メールを送信するための最も基本的なコードを説明します。

import smtplib

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

def send_email(user, password, recipient, subject, body):
    msg = MIMEMultipart()
    msg['From'] = user
    msg['To'] = recipient
    msg['Subject'] = subject
    msg.attach(MIMEText(body, 'plain'))

    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login(user, password)
    text = msg.as_string()
    server.sendmail(user, recipient, text)
    server.quit()

このコードでは次の手順でメールを送信しています。

Pythonの基本的な構文で書かれているため、初心者の方でも理解しやすいでしょう。

  1. smtplibemail.mime.multipartemail.mime.textのライブラリをインポートします。
    これらのライブラリはPythonの標準ライブラリで、メールを送信するために必要な機能を提供しています。
  2. send_emailという関数を定義します。この関数は5つの引数を持ちます:送信者(user)、パスワード(password)、受信者(recipient)、件名(subject)、本文(body)。
  3. MIMEMultipartクラスを使って、メールの本体(メッセージ本体、ヘッダー情報など)を作成します。
  4. MIMETextクラスを使って、本文をメールに添付します。
  5. smtplib.SMTPクラスを使ってSMTPサーバーに接続します。
    この例では、GmailのSMTPサーバー(’smtp.gmail.com’)を使用し、587番ポートを指定しています。
  6. starttlsメソッドを使ってTLS暗号化を開始します。
  7. loginメソッドを使ってSMTPサーバーにログインします。
  8. sendmailメソッドを使ってメールを送信します。
  9. 最後に、quitメソッドを使ってSMTPサーバーからログアウトします。

以上が、Pythonを使ってメールを送信するための基本的なコードです。

このコードを適切にカスタマイズすることで、あらゆるメール送信のニーズに対応することができます。

次に、具体的な実行結果を見てみましょう。

次のようにsend_email関数を呼び出すと、指定したメールアドレスにメールが送信されます。

send_email('your-email@gmail.com', 'your-password', 'recipient-email@gmail.com', 'Hello', 'This is a test email.')

この場合、your-email@gmail.comからrecipient-email@gmail.comに、「Hello」の件名で、「This is a test email.」という本文のメールが送信されます。

ただし、実際にこのコードを試す場合は、適切なメールアドレスとパスワードに置き換えてください。

なお、このコードはあくまで基本的なメール送信のサンプルであり、セキュリティ対策やエラーハンドリングについては考慮されていません。

本番環境で使用する際には、パスワード管理のセキュリティ対策や適切なエラーハンドリングを行うことが重要です。

○メール送信のサンプルコード2:メールに添付ファイルを付けて送信

続いて、メールに添付ファイルを追加する方法について説明します。

Pythonのemailライブラリを利用して、メールに添付ファイルを付けて送信することができます。

このコードではemailライブラリのMIMEMultipartMIMEBaseを使って添付ファイルを扱う手法を紹介します。

この例ではテキストファイルを添付してメールを送信します。

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

# SMTPサーバの設定
smtp_host = 'smtp.gmail.com'
smtp_port = 587

# メールの送信元と送信先の設定
from_email = '送信元のメールアドレス'
to_email = '送信先のメールアドレス'

# メールの内容を設定
subject = 'Pythonでメール送信テスト'
body = 'これはPythonで送信したメールのテストです。'
password = '送信元メールアドレスのパスワード'

# MIMEMultipartオブジェクトを作成
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = from_email
msg['To'] = to_email
msg.attach(MIMEText(body, 'plain'))

# 添付ファイルの設定
file_path = '送信するファイルのパス'
attachment = open(file_path, 'rb')

part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % file_path)

# 添付ファイルをメールに追加
msg.attach(part)

# メールを送信
server = smtplib.SMTP(smtp_host, smtp_port)
server.starttls()
server.login(from_email, password)
server.send_message(msg)
server.quit()

このコードでは最初にメールの基本的な設定を行っています。

その後、MIMEMultipartクラスを使用して、メールの本文と添付ファイルを1つのメールにまとめています。

そしてMIMEBaseクラスを使用して添付ファイルをエンコードし、メールに追加しています。

具体的には、まずMIMEMultipartオブジェクトmsgを作成し、メールの本文を追加します。

その後、open関数で添付するファイルを読み込み、MIMEBaseオブジェクトpartを作成して、このオブジェクトに読み込んだファイルを追加します。

その後、encode_base64関数でpartをエンコードし、ヘッダーを追加しています。

最後に、msg.attach(part)partmsgに追加して、メールを送信しています。

このコードを実行すると、指定したメールアドレスに指定したファイルが添付されたメールが送信されます。

注意点としては、添付ファイルを扱う際にはファイルのパスを正しく指定することが重要です。

また、MIMEBaseオブジェクトを作成する際の引数にはファイルの種類を指定します。

上記の例では'application''octet-stream'を指定していますが、これは一般的なバイナリファイルを表しています。

ファイルの種類によってはこれを適切なものに変更する必要があります。

また、添付ファイルを含むメールを送信する際には、ファイルの大きさが問題となることもあります。

SMTPサーバによっては送信できるファイルのサイズが制限されているため、大きなファイルを送信する際には注意が必要です。

これでPythonを使用して、添付ファイルを含むメールを送信することができます。

様々な情報を共有する際に役立つ手段となるでしょう。

次のステップでは、HTMLを利用してメールを送信する方法について解説します。

これにより、よりリッチなコンテンツを含むメールを送信することが可能になります。

○メール送信のサンプルコード3:HTMLメールを送信

Pythonを使って、HTML形式のメールを送信する方法について解説します。

HTMLメールは、テキストのみのメールと違い、リンク、色、フォント、画像など、豊かな表現を用いることができます。

このコードでは、Pythonのemail.mime.multipartとemail.mime.textを使って、HTMLメールを作成して送信しています。

まずはじめに、email.mime.multipart.MIMEMultipartとemail.mime.text.MIMETextをインポートします。

これらのモジュールは、メールの本文を作成するために使用します。

次に、メールのヘッダー情報を設定します。ここでは送信者、受信者、件名を設定しています。

メールの本文はHTMLで作成し、それをMIMETextの第一引数に、第二引数には”html”を指定して、HTMLメールを作成します。

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib

smtp_host = 'smtp.gmail.com'
smtp_port = 587
username = 'あなたのユーザー名'
password = 'あなたのパスワード'
from_email = '送信者のメールアドレス'
to_email = '受信者のメールアドレス'

msg = MIMEMultipart('alternative')
msg['Subject'] = 'テストメール(HTML)'
msg['From'] = from_email
msg['To'] = to_email

html = """
<html>
  <body>
    <h1>こんにちは!</h1>
    <p>これは<strong>HTMLメール</strong>のテストです。</p>
  </body>
</html>
"""

html_part = MIMEText(html, 'html')
msg.attach(html_part)

server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(username, password)
server.sendmail(from_email, to_email, msg.as_string())
server.quit()

このコードを実行すると、HTML形式のメールが送信されます。

メールを受け取った側は、HTMLメールとして閲覧することができます。これにより、テキストのみのメールよりも、リッチな表現が可能となります。

注意点としては、HTMLタグの使い方を間違えると、メールの表示がおかしくなる可能性があります。

また、すべてのメールクライアントがHTMLメールをサポートしているわけではないため、受け取った側がHTMLメールを正しく表示できない場合がある点を考慮してください。

そのような場合は、HTML部分とプレーンテキスト部分の両方をメールに含めることで対処可能です。

○メール送信のサンプルコード4:送信エラー時の例外処理

メール送信時には様々なエラーが発生する可能性があります。

SMTPサーバーへの接続失敗、認証エラー、受信者アドレスの不正など、これらを事前に想定してエラーハンドリングを行うことは重要です。

このコードでは、Pythonのtry-except構文を使って、エラーハンドリングを行っています。

まずはじめに、メール送信のプロセスをtryブロック内に記述します。

これにより、このブロック内でエラーが発生した場合、すぐにその後の行へ進むのではなく、対応するexceptブロックへ移動します。

それでは具体的なコードを見ていきましょう。

from email.mime.text import MIMEText
import smtplib

smtp_host = 'smtp.gmail.com'
smtp_port = 587
username = 'あなたのユーザー名'
password = 'あなたのパスワード'
from_email = '送信者のメールアドレス'
to_email = '受信者のメールアドレス'

msg = MIMEText('テストメール')
msg['Subject'] = 'テストメール'
msg['From'] = from_email
msg['To'] = to_email

try:
    server = smtplib.SMTP(smtp_host, smtp_port)
    server.ehlo()
    server.starttls()
    server.ehlo()
    server.login(username, password)
    server.sendmail(from_email, to_email, msg.as_string())
    server.quit()
    print("メールを送信しました。")
except Exception as e:
    print("メールの送信に失敗しました:", str(e))

このコードを実行すると、メール送信に成功すれば”メールを送信しました。”と表示されます。

一方、メール送信中に何らかのエラーが発生すると、”メールの送信に失敗しました:”とそのエラーメッセージが表示されます。

具体的には、SMTPサーバーへの接続失敗、認証エラー、受信者アドレスの不正など、各種エラーが発生する可能性があります。

エラーメッセージを適切に表示し、その原因を特定することで問題の解決に繋がります。

○メール送信のサンプルコード5:複数の宛先にメールを送信

Pythonを使ってメールを送信する際には、一度に複数の宛先にメールを送ることも可能です。

これは、例えば、同じ内容のメールを複数の人に送りたいときなどに便利な機能です。

この章では、Pythonのsmtplibを使って、複数の宛先に一度にメールを送る方法について解説します。

まず、次のコードをご覧ください。

from email.mime.text import MIMEText
import smtplib

smtp_host = 'smtp.gmail.com'
smtp_port = 587
username = 'あなたのユーザー名'
password = 'あなたのパスワード'
from_email = '送信者のメールアドレス'
to_emails = ['受信者1のメールアドレス', '受信者2のメールアドレス']

msg = MIMEText('テストメール')
msg['Subject'] = 'テストメール'
msg['From'] = from_email
msg['To'] = ', '.join(to_emails)

server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(username, password)
server.sendmail(from_email, to_emails, msg.as_string())
server.quit()

このコードでは、to_emailsという変数に、複数のメールアドレスをリスト形式で格納しています。

そして、sendmail関数の宛先にこのリストを指定することで、一度に複数の宛先にメールを送ることが可能となっています。

ただし、メールヘッダの’To’フィールドにリストをそのまま指定するとエラーとなるため、', '.join(to_emails)という形式で文字列に変換してから指定しています。

これにより、メールヘッダも正しく設定され、複数の受信者が表示されます。

●Pythonでメール送信時の一般的なエラーとその対処法

Pythonを使ってメールを送信する際、異なる原因によりエラーが発生することがあります。

そのようなエラーを解決するための一般的な対処法を3つご紹介します。

○エラー例と対処法1:SMTPサーバーへの接続ができない

最初のエラー例は、「SMTPサーバーへの接続ができない」です。

このエラーは、SMTPサーバーへの接続に問題がある場合に発生します。

具体的な解決方法としては、次の2つが挙げられます。

  1. SMTPサーバーのアドレスやポート番号が正しいか確認します。
    間違った情報が設定されていると接続できません。
  2. ネットワーク接続が正常に行えるか確認します。
    ネットワーク接続が不安定または存在しない場合、SMTPサーバーへ接続することはできません。

○エラー例と対処法2:メールの送信に失敗する

次のエラー例は、「メールの送信に失敗する」です。

このエラーは、メールの送信処理に問題がある場合に発生します。

解決方法としては、次の点を確認します。

  1. メールアドレスが正しい形式になっているか確認します。
    間違った形式のメールアドレスを指定していると、メールの送信が失敗します。
  2. SMTPサーバーへのログイン情報(ユーザー名とパスワード)が正しいか確認します。
    間違ったログイン情報を使用すると、メールの送信が失敗します。

○エラー例と対処法3:SSLエラーが発生する

最後のエラー例は、「SSLエラーが発生する」です。

このエラーは、SSL(Secure Sockets Layer)の設定に問題がある場合に発生します。

具体的な解決方法としては、次の2つが挙げられます。

  1. SMTPサーバーのSSL設定が正しいか確認します。
    SMTPサーバーによっては、SSLの設定が必要となる場合があります。
  2. SSLに関するライブラリがPython環境に正しくインストールされているか確認します。
    必要なライブラリが欠けていると、SSLエラーが発生します。

●メール送信のカスタマイズ方法

Pythonでメール送信をカスタマイズする方法を学ぶことで、一歩進んだPythonスキルを身につけることができます。

具体的には、送信者情報、受信者情報、メール本文をカスタマイズする方法を学びます。

○送信者情報のカスタマイズ

まず、送信者情報をカスタマイズする方法について学びます。

下記のコードはPythonのsmtplibとemailモジュールを使って、送信者情報をカスタマイズする一例です。

import smtplib
from email.mime.text import MIMEText

msg = MIMEText('メールの本文です')
msg['Subject'] = '件名'
msg['From'] = '送信者のメールアドレス'
msg['To'] = '受信者のメールアドレス'

smtpobj = smtplib.SMTP('SMTPサーバーのアドレス', SMTPサーバーのポート番号)
smtpobj.login('ユーザー名', 'パスワード')
smtpobj.sendmail('送信者のメールアドレス', '受信者のメールアドレス', msg.as_string())
smtpobj.close()

このコードではMIMETextを使ってメールの本文を作成し、そのオブジェクトの’From’フィールドに送信者のメールアドレスを設定しています。

これにより、送信者情報をカスタマイズすることができます。

○受信者情報のカスタマイズ

次に、受信者情報をカスタマイズする方法について学びます。

下記のコードはPythonのsmtplibとemailモジュールを使って、受信者情報をカスタマイズする一例です。

import smtplib
from email.mime.text import MIMEText

msg = MIMEText('メールの本文です')
msg['Subject'] = '件名'
msg['From'] = '送信者のメールアドレス'
msg['To'] = '受信者のメールアドレス1, 受信者のメールアドレス2'

smtpobj = smtplib.SMTP('SMTPサーバーのアドレス', SMTPサーバーのポート番号)
smtpobj.login('ユーザー名', 'パスワード')
smtpobj.sendmail('送信者のメールアドレス', ['受信者のメールアドレス1', '受信者のメールアドレス2'], msg.as_string())
smtpobj.close()

このコードではMIMETextの’To’フィールドに複数のメールアドレスをカンマ区切りで設定しています。

さらに、smtplibのsendmailメソッドの第2引数にも受信者のメールアドレスをリスト形式で設定しています。

これにより、一度に複数の受信者にメールを送ることができます。

○メール本文のカスタマイズ

最後に、メール本文をカスタマイズする方法について学びます。

下記のコードはPythonのsmtplibとemailモジュールを使って、メール本文をカスタマイズする一例です。

import smtplib
from email.mime.text import MIMEText

msg = MIMEText('これはカスタマイズされたメールの本文です')
msg['Subject'] = '件名'
msg['From'] = '送信者のメールアドレス'
msg['To'] = '受信者のメールアドレス'

smtpobj = smtplib.SMTP('SMTPサーバーのアドレス', SMTPサーバーのポート番号)
smtpobj.login('ユーザー名', 'パスワード')
smtpobj.sendmail('送信者のメールアドレス', '受信者のメールアドレス', msg.as_string())
smtpobj.close()

このコードではMIMETextを使ってメールの本文を作成しています。

引数にメールの本文を設定することで、任意の内容をメール本文として送信することができます。

まとめ

この記事ではPythonを使ったメール送信について、初心者でも理解しやすいように詳しく解説しました。

具体的には、メール送信のカスタマイズ方法、送信者情報・受信者情報・メール本文のカスタマイズ方法について、それぞれ具体的なサンプルコードとともに説明を行いました。

Pythonでメールを送信する基本的な手順は以下の通りです。

まず、smtplibモジュールを使ってSMTPオブジェクトを作成します。次に、loginメソッドでSMTPサーバーにログインします。

そして、email.mime.textモジュールのMIMETextを使ってメールの内容を作成し、sendmailメソッドでメールを送信します。

最後に、closeメソッドでSMTP接続を閉じます。

それぞれのステップでは、必要に応じて送信者情報、受信者情報、メール本文をカスタマイズすることができます。

例えば、送信者情報はMIMETextオブジェクトの’From’フィールドに設定することで、受信者情報は’To’フィールドに設定することで、またメール本文はMIMETextの引数に設定することでそれぞれカスタマイズすることが可能です。

また、これらの情報を一度に複数設定することも可能で、例えば複数の受信者に対してメールを送信する場合などに有効です。

その際は、’To’フィールドにはカンマ区切りの文字列を、sendmailメソッドの受信者情報にはリスト形式のメールアドレスをそれぞれ設定します。

これらの知識を活用すれば、Pythonでメール送信の機能を実装し、更にそれをカスタマイズすることが可能となります。

これにより、ユーザーに対する通知機能や、システムの自動化など、さまざまなアプリケーションで活用することができます。

以上が、Pythonを使ったメール送信についての基本的な知識となります。

これらを理解し、実際にコードを書いて実行することで、Pythonの理解が深まり、より高度なプログラミングが可能となるでしょう。

次のステップとしては、エラーハンドリングの実装やSSLによる安全な通信の設定など、さらに高度なテクニックに挑戦してみてください。