PythonでGmailを介してメールを送信する方法は?

公開: 2021-06-06

大量のメールを手動で送信するのは面倒な作業です。 サードパーティのサービスを使用して、一度に大量の電子メールを送信できます。

メールを送信するための独自のカスタマイズされたスクリプトを作成してみませんか?

素晴らしいですね。

そうですよ。 Pythonでメールを送信するスクリプトを作成します。

Pythonには、メールの送信に使用されるsmtplibというライブラリがあります。 ライブラリsmtplibは、 SMTP (Simple Mail Transport Protocol)に基づいています。 SMTPは、他の人に電子メールを送信するために使用されます。

Gmailを設定する

ここでは、Gmailをメールプロバイダーとして使用します。 Googleはスクリプトのログインを許可していません。また、スクリプトがGmailアカウントにログインできるように、Gmailアカウントのセキュリティを変更する必要があります。

Gmailアカウントのセキュリティオプションを変更すると、他のユーザーがアカウントに簡単にアクセスできるようになるため、適切ではありません。 新しいGmailアカウントを作成することをお勧めします。 ここの設定に移動し、 [安全性の低いアプリを許可する:オン]設定をオンにします。

上記の設定をオンにすることに不安がある場合は、GoogleAPIを使用してGmailアカウントにログインできます。 認証にGoogleAPIを使用するためのスクリプトはここにあります。

メールを送信する手順

smtplibライブラリを使用してメールを送信するには、特定の手順を実行する必要があります。 最初に手順を見てから、スクリプトを作成します。

#1。 SMTPサーバーに接続する

各サービスプロバイダーには、異なるSMTPサーバーのドメイン名とポートがあります。 スクリプトで使用するSMTPサーバーのドメイン名と電子メールプロバイダーのポートを使用する必要があります。 GmailのSMTPサーバーのドメイン名とポートはsmtp.gmail.com<em>465</em>です。

SMTPサーバー接続にはTSL暗号化よりも安全であるため、 SSL暗号化を使用します。 TSL暗号化を使用する場合は、 465ではなく587ポートを使用してください。 SMTPサーバーのドメイン名は、電子メールサービスプロバイダーによって異なります。

SMTPサーバーに接続するためのコード

server = smtplib.SMTP_SSL(smtp_server_domain_name, port, context=ssl_context)

#2。 ログイン

SMTPサーバーへの接続が確立されると、 login SMTPオブジェクトのメソッドで電子メールアドレスとパスワードを使用してloginできます。 コードは次のようになります。

 server.login(sender_email, password)

#3。 メールを送る

ログイン後、メールの送信を待つことはできません。 sendmailメソッドを使用してメールを送信します。 必ず次の形式でメールを送信してください。

件名:your_subject_for \ newline mail_content

スペースは必要ありません。 これらは、上記の形式で説明するためのものです。 サンプルコードを見てみましょう。

 server.sendmail(sender_mail, email, f"Subject: {subject}\n{content}")

#4。 終了する

SMTPを終了することを忘れないでくださいc

Pythonを使用してメールを送信する手順を見てきました。 ただし、完全なコードについては説明していません。 コードを簡単に見ていきましょう。

 import smtplib, ssl class Mail: def __init__(self): self.port = 465 self.smtp_server_domain_name = "smtp.gmail.com" self.sender_mail = "GMAIL_ADDRESS" self.password = "SECURE_PASSWORD" def send(self, emails, subject, content): ssl_context = ssl.create_default_context() service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context) service.login(self.sender_mail, self.password) for email in emails: result = service.sendmail(self.sender_mail, email, f"Subject: {subject}\n{content}") service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() subject = input("Enter subject: ") content = input("Enter content: ") mail = Mail() mail.send(mails, subject, content)

Mailというクラスを作成しました。 また、メールを送信するためのsendというメソッドがあります。 クラスを書くかどうかはあなた次第です。 クラスはそれをより読みやすくします。 上記のすべてのステップをsendメソッドで1つずつ実装しました。

やあ! Pythonスクリプトを使用してメールを送信しました。

HTMLコンテンツ

HTMLでメールを送信したい場合はどうなりますか? 出来ますか?

ええ、どうしてですか。 email.mimeというライブラリのHTMLを使用してメールを送信できます。 組み込みのライブラリです。

MIMEは、アプリケーションプログラム、ビデオ、画像などをサポートするために電子メールの形式を拡張するために使用される標準です。

email.mimeモジュールから必要な2つのクラスがあります。 それらはMIMETextMIMEMultipartです。 それらについての簡単な説明を見てみましょう。

#1。 MIMEText

MIMETextクラスは、メールコンテンツをHTMLで記述するために使用されます。 HTMLコンテンツとコンテンツのタイプを渡すことにより、クラスMIMETextのインスタンスを作成します。 以下のサンプルコードを参照してください。

 html_content = MIMEText(html_template, 'html')

一部のメールサービスはHTMLレンダリングをサポートしていません。 したがって、プレーンテキストとHTML用にクラスMIMETextの2つのインスタンスを作成することをお勧めします。

#2。 MIMEMultipart

MIMEMultipartクラスは、アドレスからアドレスなど、件名のフォーマットと書き込みを簡素化するために使用されます。MIMETextクラスで作成されたコンテンツは、 attachメソッドを使用してMIMEMultipartに提供されます。

プレーンテキストまたはHTMLをレンダリングするためのalternative引数を使用して、MIMEMultipartのインスタンスが作成されていることを確認する必要があります。 HTMLコンテンツを含むメールを送信しましょう。

 import smtplib, ssl from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart class Mail: def __init__(self): ... def send(self, emails): ssl_context = ssl.create_default_context() service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context) service.login(self.sender_mail, self.password) for email in emails: mail = MIMEMultipart('alternative') mail['Subject'] = 'Geekflare Celebrations' mail['From'] = self.sender_mail mail['To'] = email text_template = """ Geekflare Hi {0}, We are delighted announce that our website hits 10 Million views this month. """ html_template = """ <h1>Geekflare</h1> <p>Hi {0},</p> <p>We are delighted announce that our website hits <b>10 Million</b> views last month.</p> """ html_content = MIMEText(html_template.format(email.split("@")[0]), 'html') text_content = MIMEText(text_template.format(email.split("@")[0]), 'plain') mail.attach(text_content) mail.attach(html_content) service.sendmail(self.sender_mail, email, mail.as_string()) service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() mail = Mail() mail.send(mails)

MIMEMultipartインスタンスでその属性Bccを使用して、ブラインドカーボンコピーを追加することもできます。

添付ファイルの追加

添付ファイルは、画像、PDF、ドキュメント、シート、などすることができ、中にMIMEBaseありと呼ばれているemail.mimeクラス。 メールに添付ファイルを追加するために使用されます。

上記のメールに添付ファイルを追加しましょう。

 import smtplib, ssl from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders from pathlib import Path class Mail: def __init__(self): ... def send(self, emails): ## login... for email in emails: ## MIMEMultipart instance ## text and html templates ## MIMEText instances ## attaching messages to MIMEMultipart ## attaching an attachment file_path = "Geekflare-logo.png" mimeBase = MIMEBase("application", "octet-stream") with open(file_path, "rb") as file: mimeBase.set_payload(file.read()) encoders.encode_base64(mimeBase) mimeBase.add_header("Content-Disposition", f"attachment; filename={Path(file_path).name}") mail.attach(mimeBase) ## sending mail service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() mail = Mail() mail.send(mails)

一度にバルクメールにメール

ループを使用して、同じメールを複数のメンバーに送信しました。 これは1つのケースです(受信者に他の受信者について知られたくない場合)。

同じグループの1000人のメンバーに同じメールを一度に送信する必要があると仮定します。 このような場合、ループの使用は適切ではありません。 一般的なメール作成の[宛先]フィールドに複数のメールを追加できます。 Pythonスクリプトでそれを行う方法は?

メールのリストを、コンマとスペースで区切られた文字列として組み合わせる必要がありますjoinメソッド文字列を使用して、すべての電子メールを文字列として組み合わせることができます。 メールを文字列として組み合わせるコードをご覧ください。

 ", ".join(emails)

上記の文字列を使用して、上記のスクリプトのToフィールドを置き換えます。 これで、一度に大量のメールにメールを送信できました。

結論

Pythonでメールを送信するためのサードパーティライブラリがいくつかあります。 それらのいくつかは、エンベロープ、Yagmail、フランカーなどです。これらのライブラリは、数行のコードでスクリプトを作成するのに役立ちます。 それらを探索することもできます。

これで、Pythonスクリプトを使用してメールを自動化できます。 メール送信の構造は、ユースケースによって異なります。 電子メールを送信するさまざまなシナリオを見てきました。 チュートリアルで説明されているスクリプトは、ユースケースに合わせて簡単にカスタマイズできます。 私はこの記事から参照を取りました。

ハッピーコーディング