Python实现SMTP协议发送邮件(网易、新浪、qq)

我们这里拿新浪邮箱作为发送者,qq邮箱作为接收者

首先,我们要在新浪邮箱开启SMTP服务

网易邮箱的话是在客户授权密码里面开启,并且需要设置授权密码(新浪不用)

然后我们就可以开始写代码了:

from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email import encoders
from email.utils import parseaddr,formataddr
import smtplib
from_addr='********'#用来发送邮件的邮箱地址
password='********'#邮箱密码或者是授权密码
to_addr=['******']#目标邮箱地址
smtp_server='smtp.sina.com'#这里是新浪的SMTP服务器地址
#发送的信息格式
content=MIMEText('hello,send by Python','plain','utf-8')
msg=MIMEMultipart()
msg['From']=Header(from_addr)#定义发件人
msg['Subject']=Header('Python 邮件测试','utf-8')#定义邮件名
msg.attach(content)#加上邮件的内容
try:
    server=smtplib.SMTP()
    server.connect(smtp_server,25)#连接SMTP服务器
    server.set_debuglevel(1)#打印调试信息
    server.login(from_addr,password)#登陆邮箱
    server.sendmail(from_addr,to_addr,msg.as_string())#发送邮件
    print("Send successfully!")
except smtplib.SMTPException as e:
    server.quit()#退出
    print("发送失败")

注意这里的password如果有设置客户授权密码的话就是授权密码,否则就是登陆密码

运行程序,我们就可以看见目标邮箱收到了我们的测试邮件

但是这样我们用25号端口都是以明文发送的,很容易被监视,所以我们可以发送加密邮件,只需要利用SSL:

try:
    server=smtplib.SMTP_SSL(smtp_server,"465")
    server.set_debuglevel(1)
    server.login(from_addr,password)
    server.sendmail(from_addr,to_addr,msg.as_string())
    print("Send successfully!")
except smtplib.SMTPException as e:
    server.quit()
    print("发送失败")
 

具体端口还是要看每个邮箱:

 

 

如果我们要带上附件,假如我们这里需要发送一张图片

from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email import encoders
from email.utils import parseaddr,formataddr
import smtplib
from_addr='********'#用来发送邮件的邮箱地址
password='********'#邮箱密码或者是授权密码
to_addr=['******']#目标邮箱地址
smtp_server='smtp.sina.com'#这里是新浪的SMTP服务器地址
#发送的信息格式
content=MIMEText('hello,send by Python','plain','utf-8')
msg=MIMEMultipart()
msg['From']=Header(from_addr)#定义发件人
msg['Subject']=Header('Python 邮件测试','utf-8')#定义邮件名
msg.attach(content)#加上邮件的内容
with open('test.png','rb') as f:
    mime=MIMEBase('image','png',filename="test.png")
    #头信息
    mime.add_header('Content-Disposition','attachment',filename="test.png")
    mime.add_header('Content-ID','<0>')
    mime.add_header('X-Attachment-ID','0')
    #把附件内容读进来
    mime.set_payload(f.read())
    #用Base64编码
    encoders.encode_base64(mime)
     # 添加到MIMEMultipart:
    msg.attach(mime)
try:
    server=smtplib.SMTP()
    server.connect(smtp_server,25)#连接SMTP服务器
    server.set_debuglevel(1)#打印调试信息
    server.login(from_addr,password)#登陆邮箱
    server.sendmail(from_addr,to_addr,msg.as_string())#发送邮件
    print("Send successfully!")
except smtplib.SMTPException as e:
    server.quit()#退出
    print("发送失败")

 

如果要把一个图片嵌入到邮件正文中怎么做?直接在HTML邮件中链接图片地址行不行?答案是,大部分邮件服务商都会自动屏蔽带有外链的图片,因为不知道这些链接是否指向恶意网站。

要把图片嵌入到邮件正文中,我们只需按照发送附件的方式,先把邮件作为附件添加进去,然后,在HTML中通过引用src="cid:0"就可以把附件作为图片嵌入了。如果有多个图片,给它们依次编号,然后引用不同的cid:x即可。

把上面代码加入MIMEMultipartMIMETextplain改为html,然后在适当的位置引用图片:

msg.attach(MIMEText('<html><body><h1>Hello</h1>' +
    '<p><img src="cid:0"></p>' +
    '</body></html>', 'html', 'utf-8'))

再次发送,就可以看到图片直接嵌入到邮件正文的效果:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
利用 Python 发送邮件需要使用到 smtplib 库。 具体实现步骤如下: 1. 导入 smtplib, email.mime.text 和 email.mime.multipart 库 ```python import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart ``` 2. 设置发件人、收件人、抄送人、邮件主题等信息 ```python from_addr = '发件人邮箱地址' to_addr = '收件人邮箱地址' cc_addr = '抄送人邮箱地址' password = '发件人邮箱密码' smtp_server = 'smtp.邮箱服务器地址:端口号' msg = MIMEMultipart() msg['From'] = from_addr msg['To'] = to_addr msg['Cc'] = cc_addr msg['Subject'] = '邮件主题' ``` 3. 添加邮件正文内容和附件等信息 ```python # 添加邮件正文 text = '邮件正文' msg.attach(MIMEText(text, 'plain')) # 添加附件 with open('附件路径', 'rb') as f: attach_file = MIMEText(f.read(), 'base64', 'utf-8') attach_file['Content-Type'] = 'application/octet-stream' attach_file.add_header('Content-Disposition', 'attachment', filename='附件名称') msg.attach(attach_file) ``` 4. 登录邮箱服务器并发送邮件 ```python # 登录邮箱服务器并发送邮件 s = smtplib.SMTP_SSL(smtp_server) s.login(from_addr, password) s.sendmail(from_addr, [to_addr, cc_addr], msg.as_string()) s.quit() ``` 完整代码示例: ```python import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from_addr = '发件人邮箱地址' to_addr = '收件人邮箱地址' cc_addr = '抄送人邮箱地址' password = '发件人邮箱密码' smtp_server = 'smtp.邮箱服务器地址:端口号' msg = MIMEMultipart() msg['From'] = from_addr msg['To'] = to_addr msg['Cc'] = cc_addr msg['Subject'] = '邮件主题' # 添加邮件正文 text = '邮件正文' msg.attach(MIMEText(text, 'plain')) # 添加附件 with open('附件路径', 'rb') as f: attach_file = MIMEText(f.read(), 'base64', 'utf-8') attach_file['Content-Type'] = 'application/octet-stream' attach_file.add_header('Content-Disposition', 'attachment', filename='附件名称') msg.attach(attach_file) s = smtplib.SMTP_SSL(smtp_server) s.login(from_addr, password) s.sendmail(from_addr, [to_addr, cc_addr], msg.as_string()) s.quit() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值