【Python3】SMTP发送邮件

犹豫和反复浪费了大量时间。

与朋友言

在完成一个邮件发送程序之前我根本不明白什么是邮件,哪怕已经读过廖雪峰大神的文章,没有贬低大神的意思,大神的博客已经非常的详细, 是我的眼大肚皮小毛病在作祟,由一个邮件程序入门python3的确是很不错的,如果可能,我希望朋友们从廖大神的python2程序自行琢磨出python3版本,这对理解字符编码很有帮助。

利器在手,天下我有,python编程推荐pycharm,有了pycharm有飞起来的冲动,fly fly fly

有码才快乐

1 #begin

2 import smtplib, email
 3 #from and import key word make it possible that use a variable stand for a specified module name
 4 from email import encoders
 5 from email.header import Header
 6 from email.mime.text import MIMEText
 7 from email.mime.multipart import MIMEMultipart
 8 from email.mime.base import MIMEBase
 9 #from key word copy a module variable name to a specified domain
10 from email.utils import parseaddr, formataddr
11 
12 #def a function to format email address
13 def _format_addr(s):
14     (name, addr) = parseaddr(s)
15     return formataddr(( \
16         Header(name, ‘utf-8‘).encode(), \
17         addr))
18 
19 #get address and other by input
20 #from_addr = input(‘From: ‘)
21 #from_name = input(‘MyName: ‘)
22 #password = input(‘Password: ‘)
23 #to_addr = input(‘To: ‘)
24 #to_name = input(‘FriendName: ‘)
25 #smtp_server = input(‘SMTP server: ‘)
26 #heading = input(‘Heading: ‘)
27 #main_body = input(‘Main body: ‘)
28 from_addr = ‘[email protected]‘
29 from_name = ‘guy‘
30 password = ‘xxxxx‘
31 #hehe, this is my email
32 to_addr = ‘[email protected]‘
33 to_name = ‘zhaodan‘
34 smtp_server = ‘smtp.qq.com‘
35 heading = ‘For my friend‘
36 #text email body
37 main_body_text = ‘i miss you, old friend‘
38 #html email body, say hello and show a picture
39 main_body_html = ‘<html>‘+\
40             ‘<body>‘+\
41             ‘<h1>hello, friend</h1>‘+\
42             ‘<p><img src="cid:0"></p>‘+\
43             ‘</body>‘+\
44             ‘</html>‘
45 from_attr = from_name + ‘ < ‘ + from_addr + ‘ > ‘
46 to_attr = to_name + ‘ < ‘ + to_addr + ‘ > ‘
47 
48 #email.mime.multipart can include accessory
49 #email.mime.text only support text, we can add email.mime.text to email.mime.multipart by attach method
50 msg = MIMEMultipart(‘alternative‘)
51 #msg.attach(MIMEText(main_body, ‘plain‘, ‘utf-8‘))
52 msg.attach(MIMEText(main_body_html, ‘html‘, ‘utf-8‘))
53 #email to be send is a list, here
54 msg[‘From‘] = _format_addr(from_attr)
55 msg[‘To‘] = _format_addr(to_attr)
56 msg[‘Subject‘] = Header(heading, ‘utf-8‘).encode()
57 with open(‘E:\\1.jpg‘, ‘rb‘) as f:
58            mime = MIMEBase(‘image‘, ‘jpg‘, filename = ‘1.jpg‘)
59            mime.add_header(‘Context-Disposition‘, ‘attachment‘, filename = ‘1.jpg‘)
60            #set cid of html, then can show img in mail body by html refrence to cid:0
61            mime.add_header(‘Content-ID‘, ‘<0>‘)
62            mime.add_header(‘X-Attachment-ID‘, ‘0‘)
63            #read file and attach file context to mime
64            mime.set_payload(f.read())
65            #encode by base64 code
66            encoders.encode_base64(mime)
67            #attach mime to msg as accessory
68            msg.attach(mime)
69 
70 #add a text email, just in case reciver can‘t parse html email
71 msg.attach(MIMEText(main_body_text, ‘plain‘, ‘utf-8‘))
72 server = smtplib.SMTP(smtp_server, 25)
73 server.starttls()
74 server.set_debuglevel(1)
75 server.connect(smtp_server, 25)
76 server.helo()
77 server.ehlo()
78 server.login(from_addr, password)
79 server.sendmail(from_addr, [to_addr], msg.as_string())
80 server.quit()
81 #end

邮件分为文本邮件和html邮件两种:

文本邮件正文仅支持文字,支持插入附件;

html邮件支持在html中插入文字、图片、链接等,同样支持插入附件,现在经常看到的就是html邮件。

发送文本邮件及设置收件人、发件人名称等见我的上一篇博客,这次只介绍一下html邮件的一些特殊之处。

html邮件 

邮件正文应当是html格式的<html><body><h1>helloworld</h1></body></html>.

邮件正文显示的图片可以通过引用的方式从附件获取,当正文显示该图片以后,附件中不再显示;具体操作步骤:附件中添加header的时候指定一个标签ID(mime.add_header(‘Content-ID‘, ‘<0>‘)), html正文引用该标签(<p><img src="cid:0"></p>)。

python支持发送加密的SMTP邮件,只需要在连接邮件服务器之前建立安全连接(server.starttls())

最终发送的邮件如上图,广告一下我的Git: https://github.com/find2014/email-smtp  ,目前学习python3,中短期目标是建立一个django架构的个人博客,有共同兴趣的朋友请私信我的邮箱。

时间: 2024-10-16 13:25:32

【Python3】SMTP发送邮件的相关文章

[Python3]SMTP发送邮件

概述 在本文中,主要介绍使用smtplib进行文本格式.HTML格式和带附件的邮件发送处理. 导入smtplib模块 import smtplib 关键函数说明 # 创建smtp对象 smtp = smtplib.SMTP([host [, port [, localhost]]] ) # 参数说明 # host: smtp服务地址,例如126邮箱的是:smtp.126.com # port: smtp服务端口 # localhost: 如果你的smtp服务在本机,则只需指定localhost即

python通过SMTP发送邮件失败,报错505/535

python通过SMTP发送邮件失败:错误1:smtplib.SMTPAuthenticationError: (550, b'User has no permission')    我们使用python发送邮件时相当于自定义客户端根据用户名和密码登录,然后使用SMTP服务发送邮件,新注册的163邮箱是默认不开启客户端授权的(对指定的邮箱大师客户端默认开启),因此登录总是被拒绝,解决办法(以163邮箱为例):进入163邮箱-设置-客户端授权密码-开启(授权码是用于登录第三方邮件客户端的专用密码)

使用 phpMailer 基于(SMTP) 发送邮件

PHPMailer是一个用于发送电子邮件的PHP函数包.它提供的功能包括:在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址.支持多种邮件编码包括:8bit,base64,binary和quoted-printable.支持SMTP验证.支持带附件的邮件和Html格式的邮件. 实现代码 : <?php include 'class.smtp.php'; include 'class.phpmailer.php'; $mail = new PHPMailer; $mail->isSMTP()

通过SMTP发送邮件的Python代码

贴上一段用Python开发的发送邮件程序 #coding=UTF-8 import smtplib from email.mime.text import MIMEText smtp_host="smtp.163.com" smtp_port="25" mail_user="[email protected]" mail_password="1111222" def send_mail(to_list,subject,cont

再谈用java实现Smtp发送邮件之Socket编程

很多其它内容欢迎訪问个人站点   http://icodeyou.com 前几天利用Socket实现了用java语言搭建webserver,全程下来应该会对Socket这个东西已经使用的很熟悉了.尽管抽象,可是使用过一次之后就会感受到它在网络通信上的作用是多么的强大.正好,今天就继续用Socket来练习使用下面Smtp协议发送一封简单的电子邮件.今天的故事呢,是我要约我女神出去吃饭啦啦啦~~~所以,面对Smtp.仅仅许成功,不许失败. 全局假定我的邮箱为[email protected]   女

WordPress SMTP发送邮件插件:WP SMTP

对于一个网站而言,发送邮件的功能是必不可少的,现在的主机一般都支持发送邮件,但是不同的主机由于函数限制或者某些其他原因,可能造成没办法正常发送邮件.这时候,我们可能就要借助第三方SMTP发送邮件. 对于使用WordPress建站的朋友来说,SMTP发送邮件的插件还是比较多的,功能大多类似,下面以WP SMTP为例讲解一下配置. WP SMTP简介 WP SMTP插件是国人制作的,设置页面的顶部包含了 Gmail邮箱.微软邮箱.163邮箱.QQ邮箱的设置示例,可以点击对应的图标查看示例截图,其他邮

将PHPMailer整合到ThinkPHP中实现SMTP发送邮件

ThinkPHP没有邮件发送的功能,于是,我就想了想,就将PHPMailer整合到ThinkPHP中吧. PHPMailer是不符合ThinkPHP规范的插件程序,所以,我们需要先将PHPMailer程序放到ThinkPHP的 Library/Vendor目录下,我这里是最新版的ThinkPHP 3.2,如果是是ThinkPHP 3.2之前的版本,可能就是Lib目录了.Vendor目录专门用于存放非标准ThinkPHP插件的目录,如下: PHPMailer整合到ThinkPHP中的存放目录 接下

gitlab配置通过smtp发送邮件(QQ exmail腾讯企业为例)

gitlab配置通过smtp发送邮件(QQ exmail腾讯企业为例) 首先祭出官网文档链接:https://docs.gitlab.com/omnibus/settings/smtp.html 其实官网已经说的很清楚了,并且给出了QQ邮箱的范例(BAT还是屌的) 1. 编辑/etc/gitlab/gitlab.rb文件(加到文件最后面就好了).以QQ企业邮箱为例: 1 2 3 4 5 6 7 8 9 gitlab_rails['smtp_enable'] = true gitlab_rails

使用mail/mailx通过office365 SMTP发送邮件

Mailx是一个智能邮件处理系统,提供POSIX mailx命令功能,提供MIME.IMAP.POP3.SMTP和S/MIME扩展,通过调用sendmail来发送邮件. 安装mailx: # yum install mailx mailx语法 mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops] [-A account] [-S variable[

Python3实现126邮箱163邮箱SMTP发送邮件

Email起到提醒作用,当爬虫过程中遇到异常或者服务器遇到问题,可以通过Email及时向自己报告.发送邮件的协议是STMP,python内置对SMTP的支持,可以发送纯文本邮件.html邮件以及带附件的邮件. SMTP协议 首先了解SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器.SMTP协议只能用来发送邮件,不能用来接收邮件,而大多数的邮件发送服务器都是使用SMTP协议.SMTP协议的默认TCP端口号是25. 发送邮件之前的配置: 上面说了是使用SM