目次
関連モジュール
smtplib module
email モジュール
いくつかのコード例
通常のテキストメールを送信する
Html 形式のメールを送信する
添付ファイル付きの電子メールを送信する
写真付きメールを送信する
包括的な例
コードのダウンロード
ホームページ ウェブフロントエンド htmlチュートリアル Python_html/css_WEB-ITnose を使用して電子メールを送信する

Python_html/css_WEB-ITnose を使用して電子メールを送信する

Jun 24, 2016 am 11:25 AM

Python は非常にシンプルで強力な言語です。他のプログラミング言語に慣れていれば、すぐに Python を使い始めることができます。 Python 自体には多くの組み込みツール モジュールがあり、C++ よりもはるかに便利です (もちろん、それぞれがさまざまなシナリオに適しています)。

ここでは、Python のメール モジュールを使用してメールを送信する方法についての私の知識を簡単に紹介します。

SMTP は電子メールを送信するためのプロトコルであり、Python には SMTP のサポートが組み込まれており、プレーン テキストの電子メール、HTML メール、および添付ファイル付きの電子メールを送信できます。 Python は主に、smtplib と email という 2 つのモジュールを使用して電子メールを送信します。Email は電子メールの構築を担当し、smtplib は電子メールの送信を担当します。

関連モジュール

smtplib module

smtplib.SMTP()smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])
ログイン後にコピー

SMTP サーバーとの接続を表す SMTP クラス コンストラクター。この接続を通じて、SMTP サーバーに指示を送信し、関連する操作 (ログイン、電子メールの送信など) を実行できます。すべてのパラメータはオプションです。パラメータの意味は以下のとおりです。

 host:smtp服务器主机名 port:smtp服务的端口,默认是25;如果在创建SMTP对象的时候提供了这两个参数,在初始化的时候会自动调用connect方法去连接服务器。
ログイン後にコピー

smtplib モジュールには SMTP_SSL クラスと LMTP クラスも提供されており、それらの動作は基本的に SMTP と同じです。

smtplib.SMTP によって提供されるメソッド:

 SMTP.set_debuglevel(level):#设置是否为调试模式。默认为False,即非调试模式,表示不输出任何调试信息。 SMTP.connect([host[, port]]):#连接到指定的smtp服务器。参数分别表示smpt主机和端口。注意: 也可以在host参数中指定端口号(如:smpt.yeah.net:25),这样就没必要给出port参数。 SMTP.docmd(cmd[, argstring]):向smtp服务器发送指令。可选参数argstring表示指令的参数。 SMTP.helo([hostname]) :使用"helo"指令向服务器确认身份。相当于告诉smtp服务器“我是谁”。 SMTP.has_extn(name):判断指定名称在服务器邮件列表中是否存在。出于安全考虑,smtp服务器往往屏蔽了该指令。 SMTP.verify(address) :判断指定邮件地址是否在服务器中存在。出于安全考虑,smtp服务器往往屏蔽了该指令。 SMTP.login(user, password) :登陆到smtp服务器。现在几乎所有的smtp服务器,都必须在验证用户信息合法之后才允许发送邮件。 SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]) :发送邮件。这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。 SMTP.quit() :断开与smtp服务器的连接,相当于发送"quit"指令。
ログイン後にコピー

email モジュール

emial モジュールは、RFC 2822 に基づく MIME およびその他のメッセージ ドキュメントを含む電子メール メッセージを処理するために使用されます。これらのモジュールを使用して電子メールのコンテンツを定義するのは非常に簡単です。これに含まれるクラスは次のとおりです (詳細については、ここをクリックしてください):

class email.mime.base.MIMEBase(_maintype, _subtype, **_params):这是MIME的一个基类。一般不需要在使用时创建实例。其中_maintype是内容类型,如text或者image。_subtype是内容的minor type 类型,如plain或者gif。 **_params是一个字典,直接传递给Message.add_header()。class email.mime.multipart.MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]]:MIMEBase的一个子类,多个MIME对象的集合,_subtype默认值为mixed。boundary是MIMEMultipart的边界,默认边界是可数的。class email.mime.application.MIMEApplication(_data[, _subtype[, _encoder[, **_params]]]):MIMEMultipart的一个子类。class email.mime.audio. MIMEAudio(_audiodata[, _subtype[, _encoder[, **_params]]]): MIME音频对象class email.mime.image.MIMEImage(_imagedata[, _subtype[, _encoder[, **_params]]]):MIME二进制文件对象。class email.mime.message.MIMEMessage(_msg[, _subtype]):具体的一个message实例.class email.mime.text.MIMEText(_text[, _subtype[, _charset]]):MIME文本对象,其中_text是邮件内容,_subtype邮件类型,可以是text/plain(普通文本邮件),html/plain(html邮件),  _charset编码,可以是gb2312等等。
ログイン後にコピー

いくつかのコード例

通常のテキストメールを送信する

#!/usr/bin/env python# -*- coding: utf-8 -*-import smtplibfrom email.mime.text import MIMETextfrom email.Header import Headerdef sendMailText(title, content, sender, receiver, serverip, serverport, username, pwd):    msg = MIMEText(content, _subtype="plain", _charset="utf-8")    # 设置正文为符合邮件格式的HTML内容    msg['Subject'] = Header(title, "utf-8")     # 设置邮件标题    msg['From'] = sender                        # 设置发件人    msg['To'] = receiver                        # 设置收件人    s = smtplib.SMTP(serverip, serverport)      # 注意!如果是使用SSL端口,这里就要改为SMTP_SSL    #s.ehlo()    #s.starttls()    s.login(username, pwd)                      # 登陆邮箱    s.sendmail(sender, receiver, msg.as_string())  # 发送邮件if __name__ == "__main__":    config = {    "from": "XXXXXXXXX@163.com",            # 发件人邮箱    "to": "YYYYYYYYYY@163.COM",             # 收件人邮箱    "serverip": "smtp.163.com",             # 发件服务器IP    "serverport":"25",                      # 发件服务器Port    "username": "XXXXXXXXX@163.com",        # 发件人用户名    "pwd": "AAAAAAAAAAAAAA"                 # 发件人密码    }    title = "python send mail"    body = "<a href='http://cpper.info'>cpper</a>"    sendMailText(title, body, config['from'], config['to'], config['serverip'], config['serverport'], config['username'], config['pwd'])
ログイン後にコピー

Html 形式のメールを送信する

基本的に上記で紹介したテキストメールと同じですが、1 つの違いがあります:

msg = MIMEText(content, _subtype="html", _charset="utf-8")
ログイン後にコピー

添付ファイル付きの電子メールを送信する

添付ファイル付きの電子メールを送信する場合は、最初に MIMEMultipart() インスタンスを作成し、次に添付ファイルを構築する必要があります。複数の添付ファイルがある場合は、それらを順番に構築し、最後に構築することができます。 smtplib.smtp を使用して送信します。

def sendMailWithAttachment(title, content, sender, receiver, serverip, serverport, username, pwd, attach = {}):    attachsize = len(attach)    if attachsize > 0 :        print 'send attach'        msg = MIMEMultipart()   #创建一个带附件的实例        for path, name in attach.items():            print path, name            if os.path.exists(path):                att = MIMEText(open(path, 'rb').read(), 'base64', 'gb2312')   #构造附件                att["Content-Type"] = 'application/octet-stream'                att["Content-Disposition"] = 'attachment; filename="' + name + '"'                msg.attach(att)                # http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html 提示发送病毒或垃圾邮件 554, 'DT:SPM 163    else:        msg = MIMEText(content, _subtype="html", _charset="utf-8")    # 设置正文为符合邮件格式的HTML内容    msg['Subject'] = Header(title, "gb2312")    # 设置邮件标题    msg['From'] = sender                        # 设置发件人    msg['To'] = receiver                        # 设置收件人    s = smtplib.SMTP(serverip, serverport)      # 注意!如果是使用SSL端口,这里就要改为SMTP_SSL    s.login(username, pwd)                      # 登陆邮箱    s.sendmail(sender, receiver, msg.as_string())  # 发送邮件attach = {}  # key : 要发送的文件,需要存在,否则读取不到:value :自定义发送邮件中的文件名attach['sendEmail.py'] = '1.py'  attach['memset.cpp'] = '2.c'#attach['noexist.cpp'] = '3.cpp'sendMailWithAttachment(title, body, config['from'], config['to'], config['serverip'], config['serverport'], config['username'], config['pwd'], attach)
ログイン後にコピー

写真付きメールを送信する

def sendMailWithImage(title, content, sender, receiver, serverip, serverport, username, pwd, images = []):    imagesize = len(images)    if imagesize > 0 :        msg = MIMEMultipart()   #创建一个带附件的实例        for path in images:            print path            if os.path.exists(path):                image = MIMEImage(open(path,'rb').read())                name = path.split(os.sep)[-1]                image.add_header("Content-Disposition", "attachment", filename=name)                image.add_header('Content-ID', '<0>')                image.add_header('X-Attachment-Id', '0')                    # We reference the image in the IMG SRC attribute by the ID we give it below                         #msg.attach(MIMEText('

hello

' + '

' + '', 'html', 'utf-8')) msg.attach(image) else: msg = MIMEText(content, _subtype="html", _charset="utf-8") # 设置正文为符合邮件格式的HTML内容 msg['Subject'] = Header(title, "gb2312") # 设置邮件标题 msg['From'] = sender # 设置发件人 msg['To'] = receiver # 设置收件人 s = smtplib.SMTP(serverip, serverport) # 注意!如果是使用SSL端口,这里就要改为SMTP_SSL s.login(username, pwd) # 登陆邮箱 s.sendmail(sender, receiver, msg.as_string()) # 发送邮件
ログイン後にコピー

包括的な例

# 发送含有各种元素的邮件def sendMail(title, content, sender, receiver, serverip, serverport, username, pwd, attach = {}, images = {}):    msg = MIMEMultipart()    msg['Subject'] = Header(title, "utf-8")     # 设置邮件标题    msg['From'] = sender                        # 设置发件人    msg['To'] = receiver                        # 设置收件人    #msg['To'] = ";".join(receiver)             # 多个收件人    attachsize = len(attach)    if attachsize > 0 :        print 'send attach'        for path, name in attach.items():            3print path, name            if os.path.exists(path):                att = MIMEText(open(path, 'rb').read(), 'base64', 'gb2312')   #构造附件                att["Content-Type"] = 'application/octet-stream'                att["Content-Disposition"] = 'attachment; filename="' + name + '"'                print att["Content-Disposition"]                msg.attach(att)    imagesize = len(images)    if imagesize > 0 :        for path, name in images.items():            #print path, name            if os.path.exists(path):                image = MIMEImage(open(path,'rb').read())                #image = MIMEImage(open(path,'rb').read(), _subtype="jpg")                image.add_header("Content-Disposition", "attachment", filename=name)                image.add_header('Content-ID', '<0>')                image.add_header('X-Attachment-Id', '0')                msg.attach(image)    s = smtplib.SMTP(serverip, serverport)      # 注意!如果是使用SSL端口,这里就要改为SMTP_SSL    s.login(username, pwd)                      # 登陆邮箱    s.sendmail(sender, receiver, msg.as_string())  # 发送邮件if __name__ == "__main__":    config = {        "from": "XXXXXXXXX@163.com",            # 发件人邮箱        "to": "YYYYYYYYYY@163.COM",             # 收件人邮箱        "serverip": "smtp.163.com",             # 发件服务器IP        "serverport":"25",                      # 发件服务器Port        "username": "XXXXXXXXX@163.com",        # 发件人用户名        "pwd": "AAAAAAAAAAAAAA"                 # 发件人密码    }    title = "python send mail"    body = "<a href='http://cpper.info'>cpper</a>"    attach = {}  # key : 要发送的文件,需要存在,否则读取不到:value :自定义发送邮件中的文件名    attach['sendEmail.py'] = '1.py'      attach['memset.cpp'] = '2.c'    attach['noexist.cpp'] = '3.cpp'    images = {}    images['lizheng3.jpg'] = '1.jpg'    sendMail(title, body, config['from'], config['to'], config['serverip'], config['serverport'], config['username'], config['pwd'], attach, images)
ログイン後にコピー

コードのダウンロード

この記事のすべてのコードは、ここからダウンロードできます: sendEmail.py。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

公式アカウントのキャッシュの更新の難しさ:バージョンの更新後のユーザーエクスペリエンスに影響を与える古いキャッシュを回避する方法は? 公式アカウントのキャッシュの更新の難しさ:バージョンの更新後のユーザーエクスペリエンスに影響を与える古いキャッシュを回避する方法は? Mar 04, 2025 pm 12:32 PM

公式アカウントのWebページはキャッシュを更新します。これはシンプルでシンプルで、ポットを飲むのに十分な複雑です。あなたは公式のアカウントの記事を更新するために一生懸命働きましたが、ユーザーはまだ古いバージョンを開くことができますか?この記事では、この背後にあるtwist余曲折と、この問題を優雅に解決する方法を見てみましょう。それを読んだ後、さまざまなキャッシュの問題に簡単に対処でき、ユーザーが常に新鮮なコンテンツを体験できるようになります。最初に基本について話しましょう。それを率直に言うと、アクセス速度を向上させるために、ブラウザまたはサーバーはいくつかの静的リソース(写真、CSS、JSなど)やページコンテンツを保存します。次回アクセスするときは、もう一度ダウンロードすることなく、キャッシュから直接検索できます。自然に高速です。しかし、このことは両刃の剣でもあります。新しいバージョンはオンラインです、

HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? Mar 17, 2025 pm 12:27 PM

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? Mar 17, 2025 pm 12:20 PM

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

WebページのPNG画像にストローク効果を効率的に追加する方法は? WebページのPNG画像にストローク効果を効率的に追加する方法は? Mar 04, 2025 pm 02:39 PM

この記事では、CSSを使用したWebページへの効率的なPNG境界追加を示しています。 CSSはJavaScriptやライブラリと比較して優れたパフォーマンスを提供し、微妙または顕著な効果のために境界幅、スタイル、色を調整する方法を詳述していると主張しています

&lt; datalist&gt;の目的は何ですか 要素? &lt; datalist&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:33 PM

この記事では、HTML&lt; Datalist&GT;について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

HTML5&lt; time&gt;を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素? HTML5&lt; time&gt;を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素? Mar 12, 2025 pm 04:05 PM

この記事では、html5&lt; time&gt;について説明します。セマンティックデート/時刻表現の要素。 人間の読み取り可能なテキストとともに、マシンの読みやすさ(ISO 8601形式)のDateTime属性の重要性を強調し、Accessibilitを増やします

&lt; Progress&gt;の目的は何ですか 要素? &lt; Progress&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:34 PM

この記事では、HTML&lt; Progress&gt;について説明します。要素、その目的、スタイリング、および&lt; meter&gt;との違い要素。主な焦点は、&lt; Progress&gt;を使用することです。タスクの完了と&lt; Meter&gt; statiの場合

&lt; meter&gt;の目的は何ですか 要素? &lt; meter&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:35 PM

この記事では、html&lt; meter&gt;について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化&lt; Meter&gt; &lt; Progress&gt;およびex

See all articles