下面是发普通邮件的代码:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
#引入smtplib、MIMEText和Header
mailhost='smtp.qq.com'
#把qq邮箱的服务器地址赋值到变量mailhost上,地址应为字符串格式
qqmail = smtplib.SMTP()
#实例化一个smtplib模块里的SMTP类的对象,这样就可以调用SMTP对象的方法和属性了
qqmail.connect(mailhost,25)
#连接服务器,第一个参数是服务器地址,第二个参数是SMTP端口号。
#注意,如果端口用465的话,第8行要用smtplib.smtp_ssl
account = input('请输入你的邮箱:')
#获取邮箱账号,为字符串格式
password = input('请输入你的密码:')
#获取邮箱密码,为字符串格式,这里的密码不是邮箱的登陆密码,而是一个授权码
qqmail.login(account,password)
#登录邮箱,第一个参数为邮箱账号,第二个参数为邮箱密码
receiver=input('请输入收件人的邮箱:')
#获取收件人的邮箱。
content=input('请输入邮件正文:')
#输入你的邮件正文,为字符串格式
message = MIMEText(content, 'plain', 'utf-8')
#实例化一个MIMEText邮件对象,该对象需要写进三个参数,分别是邮件正文,文本格式和编码
subject = input('请输入你的邮件主题:')
#输入你的邮件主题,为字符串格式
message['Subject'] = Header(subject, 'utf-8')
#在等号的右边是实例化了一个Header邮件头对象,该对象需要写入两个参数,分别是邮件主题和编码,然后赋值给等号左边的变量message['Subject']。
try:
qqmail.sendmail(account, receiver, message.as_string())
print ('邮件发送成功')
except:
print ('邮件发送失败')
qqmail.quit()
#邮件发完后退出邮箱。
如果要发带附件的邮件,可以使用下面的代码:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
def send_mail()
sender = 'xxx@qq.com' # 发送邮件的人
receivers = 'xxx@163.com' # 接收邮件人
# 第三方SMTP服务
mail_host='smtp.qq.com' # 设置发送服务器
mail_user = 'xxx@qq.com' # 登录邮箱名
mail_pass = 'xxx' # 口令(授权码)
# 创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header(sender,'utf-8') # 发送者
message['To'] = Header(receivers,'utf-8') # 接收者
subject = '扛锄头的农民给你发送了一封带附件的邮件' # 发送邮件标题
message['Subject'] = Header(subject,'utf-8')
# 邮件正文内容
mail_msg = '这个一个发送带附件的测试邮件......' # 发送邮件内容
# 三个参数:第一个是文本内容,第二个plain设置文本格式,第三个utf-8设置编码
message.attach(MIMEText(mail_msg,'plain','utf-8')) # 发送邮件正文(纯文本)
# 构造附件1,传送当前目录下的文件
File='成都.mp3'
att1 = MIMEText(open(File,'rb').read(),'base64','utf-8')
att1['Content-Type'] = 'application/octet-stream'
# 这里的filename是指邮件中显示的附件名称
att1.add_header('Content-Disposition', 'attachment', filename=File)
message.attach(att1)
# 构造附件2,传送当前目录下的文件
File='社群及直播.pdf'
att2 = MIMEText(open(File,'rb').read(),'base64','utf-8')
att2['Content-Type'] = 'application/octet-stream'
# 这里的filename是指邮件中显示的附件名称
att2.add_header('Content-Disposition', 'attachment', filename=File)
message.attach(att2)
# 如果还有其它附件,可以继续添加,附件多的话,可以创建一个列表,循环,注意文件路径必须一致
try:
smtpObj = smtplib.SMTP_SSL(mail_host,465) # 发送服务器的端口号
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender,receivers,message.as_string())
print('邮件发送成功')
except smtplib.SMTPException:
print('邮件发送失败')
smtplib.quit()
send_mail()