ホームページ > バックエンド開発 > Python チュートリアル > Python で smtplib とメール モジュールを使用してメールを送信する例

Python で smtplib とメール モジュールを使用してメールを送信する例

WBOY
リリース: 2016-06-16 08:44:24
オリジナル
1289 人が閲覧しました

SMTP模块

这么多已定义的类中,我们最常用的的还是smtplib.SMTP类,就具体看看该类的用法:
smtp实例封装一个smtp连接,它支持所有的SMTP和ESMTP操作指令,如果host和port参数被定义,则smtp会在初始化期间自动调用connect()方法,如果connect()方法失败,则会触发SMTPConnectError异常,timeout参数设置了超时时间。在一般的调用过程中,应该遵connetc()、sendmail()、quit()步骤。

SMTP模块主要方法

下面我们来看看该类的方法:

复制代码 代码如下:

SMTP.set_debuglevel(level)
设置输出debug调试信息,默认不输出调试信息。
SMTP.docmd(cmd[, argstring])
发送一个command到smtp服务器,
SMTP.connect([host[, port]])
连接到指定的smtp服务器,默认是本机的25端口。也可以写成hostname:port的形式。
SMTP.helo([hostname])
使用helo指令向smtp服务器确认你的身份。
SMTP.ehlo([hostname])
使用ehlo指令向esmtp服务器确认你的身份。
SMTP.ehlo_or_helo_if_needed()
如果在以前的会话连接中没有提供ehlo或者helo指令,这个方法调用ehlo()或者helo()。
SMTP.has_extn(name)
判断指定的名称是否在smtp服务器上。
SMTP.verify(address)
判断邮件地址是否在smtp服务器上存在。
SMTP.login(user, password)
登陆需要验证的smtp服务器,如果之前没有提供ehlo或者helo指令,则会先尝试ESMTP的ehlo指令。
SMTP.starttls([keyfile[, certfile]])
使smtp连接运行在TLS模式,所有的smtp指令都会被加密。
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
发送邮件,该方法需要一些邮件地址和消息。
SMTP.quit()
终止smtp会话并且关闭连接。

经过搜索学习发现网上大多都是用smtp类的sendmail这个方法来发邮件,那就先看看这个例子:

使用sendmail发送邮件

复制代码 代码如下:

import smtplib
import time
from email.message import Message
from time import sleep
import email.utils
import base64

smtpserver = 'smtp.gmail.com'
username = 'username@gmail.com'
password = 'password '

from_addr = 'from@gmail.com'
to_addr = 'tooooooo@qq.com'
cc_addr = 'ccccccccc@qq.com'

time = email.utils.formatdate(time.time(),True)

message = Message()
message['Subject'] = 'Mail Subject'
message['From'] = from_addr
message['To'] = to_addr
message['Cc'] = cc_addr
message.set_payload('mail content '+time)
msg = message.as_string()

sm = smtplib.SMTP(smtpserver,port=587,timeout=20)
sm.set_debuglevel(1)
sm.ehlo()
sm.starttls()
sm.ehlo()
sm.login(username, password)

sm.sendmail(from_addr, to_addr, msg)
sleep(5)
sm.quit()

Email模块

如果想在邮件中携带附件、使用html书写邮件,附带图片等等,就需要使用email模块及其子模块。下面来看看email包,email包是用来管理email信息的,它包括MIME和其他基于RFC 2822的消息格式。email包的主要特征是在它内部解析和生成email信息是分开的模块来实现的。

MIME消息由消息头和消息体两大部分组成,在邮件里就是邮件头和邮件体。邮件头与邮件体之间以空行进行分隔。

邮件头包含了发件人、收件人、主题、时间、MIME版本、邮件内容的类型等重要信息。每条信息称为一个域,由域名后加“: ”和信息内容构成,可以是一行,较长的也可以占用多行。域的首行必须“顶头”写,即左边不能有空白字符(空格和制表符);续行则必须以空白字符打头,且第一个空白字符不是信息本身固有的。

邮件体包含邮件的内容,它的类型由邮件头的“Content-Type”域指出。最常见的类型有text/plain(纯文本)和text/html(超文本)。邮件体被分为多个段,每个段又包含段头和段体两部分,这两部分之间也以空行分隔。常见的multipart类型有三种:multipart/mixed, multipart/related和multipart/alternative。
在email的包里面包含了很多模块:

复制代码 代码如下:

email.message
email.parser
email.generator
email.mime 创建email和MIME对象
email.header
email.charset
email.encoders
email.ereors
email.utils
email.iterators

主に email.mime を見てみましょう。このモジュールは主にメールに添付ファイル、画像、音声を含めるときに使用されます。通常、メッセージ オブジェクト構造は、ファイルまたはテキストの一部を解析することによって生成されます。実際、新しいメッセージ オブジェクトを既存のメッセージ構造に追加することもできます。メッセージ インスタンスを作成してオブジェクト構造を作成し、その構造に添付ファイルとヘッダー情報を追加します。電子メール パッケージには、これを簡単にするためにいくつかのサブクラスが用意されています。
次のように、電子メールのコンテンツに写真を載せるシミュレーションを行います:

メールの内容に写真を含めます

コードをコピーします コードは次のとおりです:

>from email.mime .text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
import smtplib

from_mail = 'froooooooom@gmail.com '
to_mail = 'toooooooooo@qq.com'

msg = MIMEMultipart()
msg['From'] = from_mail
msg['To'] = to_mail
msg ['件名'] = 'python mail test'

body = 'test img send'
con = MIMEText('%s

' % body,'html')
msg.attach(con)

img = MIMEImage(file) ('D:\ 10535-102.jpg','rb').read())
img.add_header('Content-ID','D:\10535-102.jpg')
msg. attach(img)

server = smtplib.SMTP('smtp.gmail.com')
server.docmd('ehol','tooooooo@gmail.com')
server.starttls( )
server .login('username@gmail.com','password')

server.sendmail(from_mail,to_mail,msg.as_string())
server.quit()

メールに添付ファイルを送信

添付ファイル付きの電子メールを送信するには、最初に MIMEMultipart() インスタンスを作成する必要があります。次に、複数の添付ファイルがある場合は添付ファイルを順番に作成し、最後に smtplib.smtp を使用して
シミュレーションを送信します。次のように電子メールに添付ファイルを含めます:

コードをコピー コードは次のとおりです:

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

#添付ファイル付きのインスタンスを作成する
msg = MIMEMultipart()

txt = MIMEText("Thisは中国語のメールの内容です",'plain', 'gb2312')
msg.attach(txt)
#添付ファイル 1 を構築します
att1 = MIMEText(open('d:\drcom.rar', 'rb ').read(), 'base64' , 'gb2312')
att1["Content-Type"] = 'アプリケーション/オクテットストリーム'
att1["Content-Disposition"] = '添付ファイル名; ="drcom.rar"'#ここ ファイル名は任意に記述できます。どのような名前を書いても、メールにどのような名前が表示されますか。
msg.attach(att1)

#添付ファイル 2 を作成します
att2 = MIMEText(open('d:\123.txt' , 'rb').read(), 'base64', 'gb2312')
att2["Content-Type"] = 'アプリケーション/オクテットストリーム'
att2["Content-Disposition"] = 'attachment filename="123.txt"'
msg.attach(att2)

#メールヘッダー
msg['を追加します'] = 'tooooooo@qq.com'
msg ['from'] = 'frommmmmmm@gmail.com'
msg['subject'] = 'hello world'




#メールを送信
試してください:
server = smtplib.SMTP()
server.connect('smtp.gmail.com')
server.starttls()
server.login('xxxxx@gmail.com','xxxxxxxxx ')#XXX はユーザー名、XXXXX はパスワードです
server.sendmail(msg['from'], msg['to'],msg.as_string ())
server.quit()
print '送信成功'
例外、e:
print str(e)
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート