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)