python自动发邮件富文本_Python发送复杂邮件

原标题:Python发送复杂邮件

146258148499915377.GIF

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

本篇,我将用两个简单的例子来回答stackoverflow站点上90%的关于python发送email的问题。大部分时候,人们都是利用smtplib发送普通邮件。随之而来的,还有三种常见的情况:发送富文本邮件、发送邮件附件以及使用邮件模板。

我将向你们展示发送高质量的邮件——使用yagmail,你们不需要关于SMTP、MIME、手动添加邮件头,或者email标准的任何知识。如果你并不了解关于它们的任何信息,我希望继续保持下去。

配置

首先,安装yagmail —— pip install yagmail,它支持Python2.7+。

然后,你可以在本地钥匙环中保存用户名以及密码(安全滴),避免在脚本中硬编码用户名、密码。更多的信息,看这里(https://github.com/kootenpv/yagmail#username-and-password)。如果你现在不想设置,在下面的例子中,你可以用yagmail.SMTP("username", "password")代替yagmail.SMTP()。

现在开始Code。

简单邮件

import yagmail

# create server object; can be reused

yag = yagmail.SMTP()

# use yag.send to actually send messages

yag.send()

注意,所有的参数都有合理的默认值。yag.send()等价于yag.send(to="same as "FROM" address", subject="", contents="").默认参数缺少"from"地址,这个是在创建SMTP对象的时候设置的。

一点题外话:有趣的是,技术上讲,你可以伪造为其他人发送邮件(用你自己的登陆信息)。现在,大多数邮件服务提供商不允许这样的操作,你发出的邮件可能永远无法到达目的地,也可能被标记为恶意邮件。

回归正题:这就是yagmail没有提供默认from支持的原因,虽然技术上,你可以这么做,不过这不在本文讨论范围。

HTML & 附件

看一看下面的代码:

import yagmail

import os

yag = yagmail.SMTP()

csv_file_names = [x for x in os.listdir(".") if x.endswith(".csv")]

contents = "

An HTML Title

Please find files attached"

yag.send("my@friend.com", "The subject", contents, attachments=csv_file_names)

上面的代码将发送:

一封HTML邮件(粗体的标题)和一些文本

将当前目录下所有的csv文件以附件形式发送

此外,可以看到,发送多种格式的内容很简单,我们不需要去管任何‘headers’相关的东西——已经被yagmail很好的处理。

对于新手来说,这些东西具备相当的难度。看到网络上的很多发送邮件的例子,50-100行,然而人们却并不熟悉标准smtplib的上层,是相当难过的事情。

记住:我们是在写Python,不是Java。

(营销)模板例子

给多个用户发送经过“裁剪”的邮件是一件有趣的事情。

目标:从当前目录添加两张内嵌图片,同时插入变量。

email_template.txt的内容如下:

Dear {name},

I noticed your profile at {social_network}, and it"s amazing etc. (standard recruitment).

Take care,

Me

相关的脚本如下:

import yagmail

with open("email_template.txt") as f:

email_template = f.read()

template_data = [

("test1@gmail.com", "G. Hub", "GitHub"),

("test2@gmail.com", "L. Inkedin", "LinkedIn"),

("test3@gmail.com", "R. Editor", "Reddit")

]

yag = yagmail.SMTP()

for to_email, name, social_network in template_data:

txt = email_template.format(name=name, social_network=social_network)

# contents, attachments, to, cc, bcc -- all can be a list (plural) or a string (singular)

contents = [txt, "brand1.png", "logo2.png"]

yag.send(to_email, "Hi!", contents)

不难想象,最终的结果看上去是这样的:

Dear G. Hub,

I noticed your profile at GitHub, and it"s amazing etc. (standard recruitment).

Take care,

Me

各位读者可以将所有的内容合并到一封邮件中,作为练习,这不会多出很多的行数,我想也不应该很难。

详细的文档,看这里(https://github.com/kootenpv/yagmail)。你将在那里找到你想要的,而且可以看到很多的小技巧。

反馈 / 彩蛋

欢迎给我反馈邮件:

with yagmail.SMTP() as yag:

yag.feedback("Awesome features! You made my day! How can I contribute?")

红利:注意关键字with,启用了上下文管理器,使用完毕后,SMTP对象将被关闭。

英文原文:http://kootenpv.github.io/2016-04-24-yagmail

译者:rApeNB

146258148511403665.JPEG

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值