見出し画像

【コピペで使える】【Python】【Gmail自動送信】具体的な手順とコード紹介、エラー対応付き

手順


1)Python環境の準備:

Pythonがインストールされていることを確認します。

2)必要なライブラリのインストール:

メール送信にはSMTPライブラリが必要です。これはPythonの標準ライブラリに含まれているので、追加のインストールは不要です。

3)メールサーバーの設定

送信に使用するメールサーバー(例: Gmail, Outlookなど)のSMTP設定を確認します。

4)メール送信用のスクリプトを作成:

送信先、送信者、メールの内容を含むスクリプトを作成します。


5)テスト送信:

スクリプトが正しく動作するかを確認するためにテストメールを送信します。


具体的なコード例

以下は、Gmailを使用してメールを送信する簡単なPythonスクリプトの例です。

<code class="!whitespace-pre hljs language-python">
<span class="hljs-keyword">import</span>
" smtplib
"
<span class="hljs-keyword">from</span>
" email.mime.text "
<span class="hljs-keyword">import</span>
" MIMEText
"
<span class="hljs-keyword">from</span>
" email.mime.multipart "
<span class="hljs-keyword">import</span>
" MIMEMultipart

"
<span class="hljs-comment"># メールサーバーの設定</span>
"
smtp_server = "
<span class="hljs-string">"smtp.gmail.com"</span>
"
smtp_port = "
<span class="hljs-number">587</span>
"
username = "
<span class="hljs-string">"your-email@gmail.com"</span>
"
password = "
<span class="hljs-string">"your-password"</span>
<span class="hljs-comment"># メールの作成</span>
"
sender_email = "
<span class="hljs-string">"your-email@gmail.com"</span>
"
receiver_email = "
<span class="hljs-string">"receiver-email@example.com"</span>
"
subject = "
<span class="hljs-string">"Pythonからの自動メール送信テスト"</span>
"
body = "
<span class="hljs-string">"Pythonスクリプトから送信されたメールです。"</span>
"

message = MIMEMultipart()
message["
<span class="hljs-string">"From"</span>
"] = sender_email
message["
<span class="hljs-string">"To"</span>
"] = receiver_email
message["
<span class="hljs-string">"Subject"</span>
"] = subject
message.attach(MIMEText(body, "
<span class="hljs-string">"plain"</span>
"))

"
<span class="hljs-comment"># SMTPサーバーに接続してメールを送信</span>
"
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()  "
<span class="hljs-comment"># セキュリティのためTLSを使用</span>
"
server.login(username, password)
server.sendmail(sender_email, receiver_email, message.as_string())
server.quit()

"
<span class="hljs-built_in">print</span>
"("
<span class="hljs-string">"メール送信成功!"</span>
")
"
</code>


上記のコードから、以下の部分を修正して使用する

  • サーバー設定の「your-email@gmail.com」と「your-password」に自身のGoogleアカウントのログイン情報を入力

  • メールの作成の「your-email@gmail.com」に自身にGmailアドレス、「receiver-email@example.com」に送信先のメールアドレス

  • 「Pythonからの自動メール送信テスト」にメールタイトル

  • 「Pythonスクリプトから送信されたメールです。」にメール本文


セキュリティ設定の変更が必要

  • Gmailを使用する場合は、"安全性の低いアプリのアクセス"を許可する必要があります。また、二段階認証を設定している場合は、アプリパスワードを生成して使用します。

その他注意点

  • セキュリティのため、本番環境ではパスワードを直接コードに記述するのではなく、環境変数や別の安全な方法で管理することをお勧めします。

  • スパムメールとして扱われないよう、送信内容や頻度に注意してください。


実行してみて、問題なくメール送信されているかを確認。されていればOK

コード最後に、print('メール送信成功!')と記載しているので、プロンプト(ターミナル)に、このように表示されていればOK

メール送信成功!


▪️よくあるエラー例

---------------------------------------------------------------------------
SMTPAuthenticationError                   Traceback (most recent call last)
Cell In[5], line 27
     25 server = smtplib.SMTP(smtp_server, smtp_port)
     26 server.starttls()  # セキュリティのためTLSを使用
---> 27 server.login(username, password)
     28 server.sendmail(sender_email, receiver_email, message.as_string())
     29 server.quit()

File ~/anaconda3/lib/python3.11/smtplib.py:750, in SMTP.login(self, user, password, initial_response_ok)
    747         last_exception = e
    749 # We could not login successfully.  Return result of last attempt.
--> 750 raise last_exception

File ~/anaconda3/lib/python3.11/smtplib.py:739, in SMTP.login(self, user, password, initial_response_ok)
    737 method_name = 'auth_' + authmethod.lower().replace('-', '_')
    738 try:
--> 739     (code, resp) = self.auth(
    740         authmethod, getattr(self, method_name),
    741         initial_response_ok=initial_response_ok)
    742     # 235 == 'Authentication successful'
    743     # 503 == 'Error: already authenticated'
    744     if code in (235, 503):

File ~/anaconda3/lib/python3.11/smtplib.py:662, in SMTP.auth(self, mechanism, authobject, initial_response_ok)
    660 if code in (235, 503):
    661     return (code, resp)
--> 662 raise SMTPAuthenticationError(code, resp)

SMTPAuthenticationError: (534, b'5.7.9 Application-specific password required. For more information, go to\n5.7.9  https://support.google.com/mail/?p=InvalidSecondFactor sx7-20020a17090b2cc700b0029072c64439sm4071966pjb.5 - gsmtp')

上記エラーメッセージ SMTPAuthenticationError は、SMTPサーバーへのログインに失敗したことを示しています。このエラーは、通常、以下のような理由で発生します:

「安全性の低いアプリのアクセス"を許可する」をしていないときに起きることがある。

Googleは、セキュリティを強化するために時々ポリシーを更新し、「安全性の低いアプリのアクセス」の扱いに変更を加えることがあります。
2021年以降、Googleは安全性の低いアプリのアクセスを段階的に削減し、新しいアカウントではこの設定を利用できなくなっている可能性があります。

対処法


アプリパスワードの使用
:

  1. Googleアカウントに二段階認証を設定

  2. アプリパスワードを生成して使用

  • Googleアカウントにログインします。

  • 「セキュリティ」セクションに移動します。

  • 「二段階認証プロセス」を設定します(まだ設定していない場合)。

  • 「アプリパスワード」セクションに移動します。

  • 新しいアプリパスワードを生成し、Pythonスクリプトで使用します。

自動生成された「アプリパスワード」を、メールサーバー設定の、passwordのところに入力する

# メールサーバーの設定
smtp_server = "smtp.gmail.com"
smtp_port = 587
username = "your-email@gmail.com"
# ここに自動生成されたアプリパスワードを使用します
password = "your-app-password"  


アプリパスワードを使用した際のコード全体は以下の通り

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

# メールサーバーの設定
smtp_server = "smtp.gmail.com"
smtp_port = 587
username = "your-email@gmail.com"
# ここに自動生成されたアプリパスワードを使用します
password = "your-app-password"  

# メールの作成
sender_email = "your-email@gmail.com"
receiver_email = "receiver-email@example.com"
subject = "Pythonからの自動メール送信テスト"
body = "Pythonスクリプトから送信されたメールです。"

message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = subject
message.attach(MIMEText(body, "plain"))

# SMTPサーバーに接続してメールを送信
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()  # セキュリティのためTLSを使用
server.login(username, password)
server.sendmail(sender_email, receiver_email, message.as_string())
server.quit()

print("メール送信成功!")


以上

この記事が気に入ったらサポートをしてみませんか?