Python 发送邮件

以下是一个使用Python发送邮件简单的实例:
#!/usr/bin/python

import smtplib

sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"



使用Python发送HTML格式的邮件
Python发送HTML格式的邮件与发送纯文本消息的邮件不同之处就是将MIMEText中_subtype设置为html。具体代码如下:
import smtplib  
from email.mime.text import MIMEText  
mailto_list=["YYY@YYY.com"] 
mail_host="smtp.XXX.com"  #设置服务器
mail_user="XXX"    #用户名
mail_pass="XXXX"   #口令 
mail_postfix="XXX.com"  #发件箱的后缀
  
def send_mail(to_list,sub,content):  #to_list:收件人;sub:主题;content:邮件内容
    me="hello"+"<"+mail_user+"@"+mail_postfix+">"   #这里的hello可以任意设置,收到信后,将按照设置显示
    msg = MIMEText(content,_subtype='html',_charset='gb2312')    #创建一个实例,这里设置为html格式邮件
    msg['Subject'] = sub    #设置主题
    msg['From'] = me  
    msg['To'] = ";".join(to_list)  
    try:  
        s = smtplib.SMTP()  
        s.connect(mail_host)  #连接smtp服务器
        s.login(mail_user,mail_pass)  #登陆服务器
        s.sendmail(me, to_list, msg.as_string())  #发送邮件
        s.close()  
        return True  
    except Exception, e:  
        print str(e)  
        return False  
if __name__ == '__main__':  
    if send_mail(mailto_list,"hello","<a href='http://www.cnblogs.com/xiaowuyi'>小五义</a>"):  
        print "发送成功"  
    else:  
        print "发送失败"  

或者你也可以在消息体中指定Content-type为text/html,如下实例:
#!/usr/bin/python

import smtplib

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test

This is an e-mail message to be sent in HTML format

<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

--------------------------------------------------------------------------------
Python发送带附件的邮件
发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib

#创建一个带附件的实例
msg = MIMEMultipart()

#构造附件1
att1 = MIMEText(open('d:\\123.rar', 'rb').read(), 'base64', 'gb2312')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="123.doc"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字
msg.attach(att1)

#构造附件2
att2 = MIMEText(open('d:\\123.txt', 'rb').read(), 'base64', 'gb2312')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="123.txt"'
msg.attach(att2)

#加邮件头
msg['to'] = 'YYY@YYY.com'
msg['from'] = 'XXX@XXX.com'
msg['subject'] = 'hello world'
#发送邮件
try:
    server = smtplib.SMTP()
    server.connect('smtp.XXX.com')
    server.login('XXX','XXXXX')#XXX为用户名,XXXXX为密码
    server.sendmail(msg['from'], msg['to'],msg.as_string())
    server.quit()
    print '发送成功'
except Exception, e:  
    print str(e) 

以下实例指定了Content-type header 为 multipart/mixed,并发送/tmp/test.txt 文本文件:
#!/usr/bin/python

import smtplib
import base64

filename = "/tmp/test.txt"

# 读取文件内容并使用 base64 编码
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent)  # base64

sender = 'webmaster@tutorialpoint.com'
reciever = 'amrood.admin@gmail.com'

marker = "AUNIQUEMARKER"

body ="""
This is a test email to send an attachement.
"""
# 定义头部信息
part1 = """From: From Person <me@fromdomain.net>
To: To Person <amrood.admin@gmail.com>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)

# 定义消息动作
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit

%s
--%s
""" % (body,marker)

# 定义附近部分
part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s

%s
--%s--
""" %(filename, filename, encodedcontent, marker)
message = part1 + part2 + part3

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, reciever, message)
   print "Successfully sent email"
except Exception:
   print "Error: unable to send email"

Python发送电子邮件可以通过 `smtplib` 库完成,它是标准库的一部分,因此不需要额外安装。下面是一个简单的介绍以及示例代码展示如何用 Python 发送带附件、HTML 内容等不同类型的邮件### 使用 smtplib 和 email 模块发送基础文本邮件 1. **导入必要的模块** - `smtplib`: 用于SMTP协议通。 - `email.mime.text.MIMEText`, `email.mime.multipart.MIMEMultipart`: 构造复杂的MIME消息体。 2. **设置服务器息** 设置你的 SMTP 服务器地址及端口号,默认情况下 Gmail 的 SMTP 地址是 `"smtp.gmail.com"` 并且 SSL/TLS 加密连接默认使用465/587端口。 3. **构造邮件内容** 创建 MIME 格式的邮件对象,并设定主题、发件人、收件人等基本息。 4. **登录邮箱账户并发送邮件** #### 基础文本邮件发送实例 ```python import smtplib from email.mime.text import MIMEText from email.header import Header # 定义变量 sender = "your_email@example.com" # 发件人的邮箱账号 receiver = ["recv_email1@example.com"] # 收件人的邮箱账号(支持多个) subject = "测试邮件标题" body = "这是一个来自Python脚本的基础文本邮件" msg = MIMEText(body, &#39;plain&#39;, &#39;utf-8&#39;) # 文本正文 msg[&#39;Subject&#39;] = Header(subject, &#39;utf-8&#39;) # 主题 msg[&#39;From&#39;] = sender # 显示的发件人名称 msg[&#39;To&#39;] = ",".join(receiver) # 显示的收件人名单 try: server = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465) # 使用SSL加密的方式链接到QQ企业邮服务器 login_result = server.login(sender, "your_password") # 登录验证 print(f"Login status code:{login_result}") if int(login_result) == 235: # 如果返回的状态码等于235表示认证成功 send_status = server.sendmail(sender, receiver, msg.as_string()) print(send_status) if not send_status: print(&#39;邮件已成功发出&#39;) else: print(&#39;邮件发送失败:&#39;, send_status) except Exception as e: print(f&#39;发生错误:{e}&#39;) finally: server.quit() # 关闭连接 ``` 请注意,出于安全考虑,在生产环境中应避免直接将密码写入源代码文件中。推荐做法是从环境变量读取或者利用第三方服务如 OAuth 授权等方式替代传统用户名+密码组合来进行身份校验。 --- 接下来是一些高级功能的应用场景说明: * **带有 HTML 格式的内容**: 将第二步中的 `MIMEText()` 函数第二个参数改为 `&#39;html&#39;` 即可构建HTML格式的消息体; * **附加普通文件**: 使用 `email.mime.base.MIMEBase` 类结合 `encoders.encode_base64()` 方法编码二进制数据加入到 MIMEMultipart 对象里作为附件; * **同时包含文字和平面媒体资源(例如图片)** : 把所有非文本部分当作独立部件挂载至根容器之下形成复合型MIME文档结构。 如果需要进一步了解上述任意一种情况的具体实现,请告诉我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值