如何在python程序中发邮件
思韵闪耀
2013-03-18
0

        以前的公司上班上网或者收发邮件都得小心翼翼的,怕一不小心被有心人瞧见,又得被说说。为了能发邮件而不被发现,嘿嘿,我就用python写了个邮件发送程序,用控制台控制,不了解的人一定以为哥还在编程工作呢。哈哈。

        下面简单介绍下如何使用python发送邮件,包括普通文本内容,也可以带附件,或者HTML内容的邮件。可以说有了python,一切都变得非常的容易。

        smtplib 模块是用来发送email的标准module,另外配合email.mime内的几个module实现起来就非常的简单。

def sendmail(message):
    try:
        smtp = smtplib.SMTP(EMAIL_HOST)
        smtp.login(EMAIL_USER, EMAIL_PWD)
        smtp.sendmail(EMAIL_USER+"@"+EMAIL_POSTFIX, TO_EMAIL, message)
        smtp.quit()
        print 'email send success.'
    except Exception ,e:
        print e
        print 'email send failed.'
    首先要导入smtplib模块,加入import smtplib,初始化的时候直接连上邮箱服务器,也就是上面的EMAIL_HOST(我使用的是163邮箱,所以定义EMAIL_HOST = 'smtp.163.com'),由于目前的邮箱基本都需要登录才可以使用,所以要调用smtp.login()函数,输入用户和密码。
def sendwithoutattachment():
    msg = MIMEText(getcontent(), 'plain','utf-8')
    getheader(msg)
    sendmail(msg.as_string())
我将发送简单文本内容的邮件单独独立为一个函数,使用MIMEText生成,注意这里用到了utf-8,因为内容有可能是中文,所以要特别指定。如果要发送html内容,则讲plain更改为html即可。
def getheader(msg):
    msg['From'] = ME
    msg['To'] = ";".join(TO_EMAIL)
    msg['Subject'] = EMAIL_HEADER
    msg['Date'] = formatdate(localtime=True)
    getheader函数是用来设置发送者,接受者,主题和发送时间的。
def getcontent():
    path = os.getcwd()
    file = os.path.join(path, CONTENT_FILE_NAME)
    content = open(file, 'rb')
    data = content.read()
    try:
        data = data.decode('gbk')
    except :
        data = data.decode('gbk','ignore')
    content.close()
    return data
    至于邮件正文,我是事先写到一个TXT文档中,读取出来。这样也比较隐蔽。:)要主意中文编码。
def getattachment(msg):
    ctype, encoding = mimetypes.guess_type(ACCESSORY_FULLPATH)
    if ctype is None or encoding is not None:
        ctype = 'application/octet-stream'
    maintype, subtype = ctype.split('/', 1)
    #Formating accessory data
    data = open(ACCESSORY_FULLPATH, 'rb')
    file_msg = MIMEBase(maintype, subtype)
    file_msg.set_payload(data.read( ))
    data.close( )
    encode_base64(file_msg)
    #file_msg["Content-Type"] = ctype # if add type then return error 10054
    file_msg.add_header('Content-Disposition', 'attachment', filename = ACCESSORY_NAME)
    msg.attach(file_msg)
 附件同样独立为一个函数来创建,这里要注意的是不要指定“Content-Type”类型,否则无法发送邮件。这个问题还没有解决。


【版权声明】
本站部分内容来源于互联网,本站不拥有所有权,不承担相关法律责任。如果发现本站有侵权的内容,欢迎发送邮件至masing@13sy.com 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

相关内容

将IIS设置克隆到新服务器...
将IIS设置克隆到新服务器的最佳方法是使用IIS配置文件。以下是详...
2025-06-06
搭建Git服务器及本机克隆...
Git是什么?Git是目前世界上最先进的分布式版本控制系统。SVN...
2025-03-17
ubuntu环境下搭建gi...
操作环境:服务器:Ubuntu 24.04.2 LTS+git 2...
2025-03-17
解决Please make...
解决Please make sure you have the c...
2025-03-17
docker-compos...
1.Compose介绍 DockerCompose是一个用来定义和...
2024-04-26
firewall-cmd ...
firewalld的简要说明:firewalld 、firewal...
2024-03-15

热门资讯

Exchange 2013/2... Exchange 2013/2016/2019邮件大小限制 可以在三个位置上配置Exchange上的...
SMTP 发送邮件错误码和解决... SMTP错误码/建议解决方法 错误总表 420 1. Timeout Communication P...
Exchange 2013 O... 最近在Exchange 2013环境中,遇到OWA/ECP无法访问的问题;用户是可以正常通过...
Roundcube 配置过各提... Fileinfo/mime_content_type configuration: OK Mimet...
彻底卸载Exchange Se... 一般来说,我们安装完Exchange Server 2016之后,可以通过正常卸载程序来进行卸载,但...
Exchange 2013批量... 一批量删除特定主题的邮件 1.1批量删除所有数据库中特定主题的邮件 1)群发了几封主题为backup...
快速查看已安装Exchange... Exchange 2010的版本号在Exchange管理控制台(EMC)显示的,好像不准确了。比如,...
在 Exchange 2016... 用户邮箱是与人员关联的 Exchange 邮箱,通常为每人一个邮箱。每个用户邮箱都有一个关联的 Ac...
exchange2013域名(... 需要对 接受的域 和 电子邮件地址策略进行配置: 首先外网域名要做解析和增加mx记录,这里就不具体说...
如何为AD 添加多个UPN后缀 今天我在群里看到有群友在问User principal name (UPN)多后缀的问题,我在这里就...