検索
ホームページウェブフロントエンドhtmlチュートリアルPython_html/css_WEB-ITnose を使用して電子メールを送信する

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

' + '

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

' + '', '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 までご連絡ください。
HTMLとコード:用語を詳しく見るHTMLとコード:用語を詳しく見るApr 10, 2025 am 09:28 AM

htmlisaspecifictypeofcodefocuseduructuringwebcontent

HTML、CSS、およびJavaScript:Web開発者に不可欠なツールHTML、CSS、およびJavaScript:Web開発者に不可欠なツールApr 09, 2025 am 12:12 AM

HTML、CSS、およびJavaScriptは、Web開発の3つの柱です。 1。HTMLは、Webページ構造を定義し、などなどのタグを使用します。2。CSSは、色、フォントサイズなどのセレクターと属性を使用してWebページスタイルを制御します。

HTML、CSS、およびJavaScriptの役割:コアの責任HTML、CSS、およびJavaScriptの役割:コアの責任Apr 08, 2025 pm 07:05 PM

HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

HTMLは初心者のために簡単に学ぶことができますか?HTMLは初心者のために簡単に学ぶことができますか?Apr 07, 2025 am 12:11 AM

HTMLは、簡単に学習しやすく、結果をすばやく見ることができるため、初心者に適しています。 1)HTMLの学習曲線はスムーズで簡単に開始できます。 2)基本タグをマスターして、Webページの作成を開始します。 3)柔軟性が高く、CSSおよびJavaScriptと組み合わせて使用​​できます。 4)豊富な学習リソースと最新のツールは、学習プロセスをサポートしています。

HTMLでの開始タグの例は何ですか?HTMLでの開始タグの例は何ですか?Apr 06, 2025 am 12:04 AM

Anexampleapalofastartingtaginhtmlis、それはaperginsaparagraph.startingtagsaresentionentientiontheyinitiateelements、definetheirtypes、およびarecrucialforurturingwebpagesandcontingthomedomを構築します。

CSSのフレックスボックスレイアウトを使用して、メニューの点線のラインセグメンテーション効果のセンターアラインメントを実現する方法は?CSSのフレックスボックスレイアウトを使用して、メニューの点線のラインセグメンテーション効果のセンターアラインメントを実現する方法は?Apr 05, 2025 pm 01:24 PM

メニューで点線のラインセグメンテーション効果を設計する方法は?メニューを設計するときは、通常、皿の名前と価格の間に左右に合わせることは難しくありませんが、真ん中の点線またはポイントはどうですか...

オンラインコードエディターはコード入力を実装するためにどのようなHTML要素を使用していますか?オンラインコードエディターはコード入力を実装するためにどのようなHTML要素を使用していますか?Apr 05, 2025 pm 01:21 PM

WebコードエディターのHTML要素分析では、多くのオンラインコードエディターを使用すると、ユーザーはHTML、CSS、およびJavaScriptコードを入力できます。最近、誰かが提案した...

React static Page構成:React-AppReviredを使用したコード圧縮を避ける方法は?React static Page構成:React-AppReviredを使用したコード圧縮を避ける方法は?Apr 05, 2025 pm 01:18 PM

React-App-Recrowiredを使用して静的ページを構築するときにコード圧縮を回避する方法について多くの開発者が配信したい...

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 中国語版

SublimeText3 中国語版

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。