python模范发送邮件的时候的简单介绍

发布时间:2022-11-16

本文目录一览:

  1. 如何用Python发邮件
  2. 如何用python发送email
  3. python批量发送邮件--包括批量不同附件
  4. 我用python发邮件。出现以下问题怎么处理?
  5. 如何在python程序中发邮件

如何用Python发邮件

Python发送邮件简单的实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = 'from@runoob.com'
receivers = ['429240967@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("菜鸟教程", 'utf-8')
message['To'] = Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"

如何用python发送email

使用stmp模块,下面是一个简单的例子:

# -*- coding: UTF-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = 'from@runoob.com'
receivers = ['tototo@163.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("from", 'utf-8')
message['To'] = Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"

python批量发送邮件--包括批量不同附件

小猪在公司做出纳,干的活却包括了出纳、会计、结算专员等工作,周末都要被无奈在家加班,主要还没有加班费,简直是被公司严重压榨。每个月初都要给每个工长发预付款账单邮件,月中发结算款账单。重复性机械工作。 一个及格线上的程序员,最起码的觉悟就是将重复性的机械工作自动化,于是,在我花了一个多小时,帮她给一部分工长发了一次邮箱后,默默的回来写了这个脚本。 所以,设计要点就是一个字—— 懒 。 恩,就酱。 经过我观察,邮件内容分为两种,这里先说第一种,“结算款”:

  1. 邮件内容(content)不变,为固定的txt文本
  2. 附件(attch)为每个工长的结算账单(excel文件.xlsx),此文件命名为总账单中自动分割出来的名字(暂时不懂怎么分割出来的=.=),格式为:
  3. 邮件主题(Subject)为附件名(不带后缀名)
  4. 邮件接收对象(工长)的名单及其邮箱地址基本不变,偶尔变动
  5. 将工长及其邮箱地址存为CSV文件的两列,python中将其读取为字典形式,存储以供后续查询邮箱地址。
  6. 遍历文件夹中的附件(.xlsx类型文件),对其进行两种操作,一方面将其名字(不带路径和后缀)提取出来,作为邮件主题(Subject),并对Subject进一步划分,得到其中的人名(工长);另一方面,将其传入MIMEbase模块中转为邮件附件对象。
  7. 由上述得到的人名(name),在字典形式的通讯录中,查找相应的地址(value),即为收件人名称和地址
  8. 利用python中的email模块和smtp模块,登录自己的邮箱账号,再对每个附件,得到的收件人名和地址,添加附件,发送邮件。done 在设计过程中有几点需要注意:
  9. 有时一个邮件地址对应两个人名,此时应该在CSV文件中分为两行存储,而不是将两个人名存为同一个键;
  10. 有账单.xlsx文件,通讯录里却没存储此人记录,程序应该打印提示没有通讯记录的人名,且不能直接退出,要保证员工看到此提示,此第一版程序还有解决此问题;
  11. 此程序发送的邮件内容为纯文本,若要求邮件内容有不同格式(如部分加粗,部分红色),还有小部分需要每次更改的地方(如邮件内容包含当前月份),如何解决?(这就是第二种邮件内容,“预算款”);
  12. 重名的,暂时还没碰到,程序中也没给出解决方案。 第一版到此,20180830,待更新 第二版更新,20180904 第三版更新,20180909 转战CSDN博客,更多博客见传送门《 xiaozhou的博客主页 》

我用python发邮件。出现以下问题怎么处理?

  1. 准备两个邮箱帐号,一个是常用的(接收端),另一个可以注册网易163邮箱或者foxmail邮箱也可(发送端),本次我使用两个QQ邮箱进行演示。
  2. 在邮箱的设置
  3. 账户中开启SMTP功能,如下图:
  4. 点击生成授权码,按照弹出窗口的提示发送短信,发送后单击我已发送按钮。
  5. 将生成的授权码复制下来以备接下来使用。如下图:
  6. 我们来编辑代码:
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))
# 发件人地址
from_addr = '10******10@qq.com'
# 密码刚才复制的邮箱的授权码
password = 'u*******************g'
# 收件人地址
to_addr = '10********28@qq.com'
# 邮箱服务器地址
smtp_server = 'smtp.qq.com'
# 设置邮件信息
msg = MIMEText('Python爬虫运行异常,异常信息为遇到HTTP 403', 'plain', 'utf-8')
msg['From'] = _format_addr('Python爬虫一号%s' % from_addr)
msg['To'] = _format_addr('管理员%s' % to_addr)
msg['Subject'] = Header('一号爬虫运行异常.', 'utf-8').encode()
# 发送邮件
server = smtplib.SMTP_SSL(smtp_server, 465)
# 打印出和SMTP服务器交互的所有信息
server.set_debuglevel(1)
# 登录SMTP服务器
server.login(from_addr, password)
# sendmail():发送邮件,由于可以一次发给多个人,所以传入一个list邮件正文是一个str,as_string()把MIMEText对象变成str。
server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()
print('邮件发送成功!')
  1. 登录接收端邮箱,查看是否发送成功,如下图:
  2. 如果能成功收到邮件的话就说明完成了。

如何在python程序中发邮件

通过命令行发送邮件,功能强大

python ./mail -s $server -f $from -t $to -u $user -p $pass -S "$subject" -m "${mail_msg}" -F $file

Python 发送邮件可以添加附件:

#!/usr/bin/python
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email import Utils, Encoders
import mimetypes, sys, smtplib, socket, getopt
class SendMail:
    def __init__(self, smtp_server, from_addr, to_addr, user, passwd):
        self.mailserver = smtp_server
        self.from_addr = from_addr
        self.to_addr = to_addr
        self.username = user
        self.password = passwd
    def attachment(self, filename):
        fd = open(filename, 'rb')
        filename = filename.split('/')
        mimetype, mimeencoding = mimetypes.guess_type(filename[-1])
        if (mimeencoding is None) or (mimetype is None):
            mimetype = 'application/octet-stream'
        maintype, subtype = mimetype.split('/')
        if maintype == 'text':
            retval = MIMEText(fd.read(), _subtype=subtype, _charset='utf-8')
        else:
            retval = MIMEBase(maintype, subtype)
            retval.set_payload(fd.read())
        Encoders.encode_base64(retval)
        retval.add_header('Content-Disposition', 'attachment', filename=filename[-1])
        fd.close()
        return retval
    def msginfo(self, msg, subject, filename):
        # message = """Hello, ALL
        # This is test message.
        # --Anonymous"""
        message = msg
        msg = MIMEMultipart()
        msg['To'] = self.to_addr
        msg['From'] = 'sa ' + self.from_addr + ''
        msg['Date'] = Utils.formatdate(localtime=1)
        msg['Message-ID'] = Utils.make_msgid()
        if subject:
            msg['Subject'] = subject
        if message:
            body = MIMEText(message, _subtype='plain')
            msg.attach(body)
        # for filename in sys.argv[1:]:
        if filename:
            msg.attach(self.attachment(filename))
        return msg.as_string()
    def send(self, msg=None, subject=None, filename=None):
        try:
            s = smtplib.SMTP(self.mailserver)
            try:
                s.login(self.username, self.password)
            except smtplib.SMTPException as e:
                print "Authentication failed:", e
                sys.exit(1)
            s.sendmail(self.from_addr, self.to_addr.split(','), self.msginfo(msg, subject, filename))
        except (socket.gaierror, socket.error, socket.herror, smtplib.SMTPException) as e:
            print "*** Your message may not have been sent!"
            print e
            sys.exit(2)
        else:
            print "Message successfully sent to %d recipient(s)" % len(self.to_addr)
if __name__ == '__main__':
    def usage():
        print """Useage:%s [-h] -s SMTP Server -f FROM_ADDRESS -t TO_ADDRESS -u USER_NAME -p PASSWORD [-S MAIL_SUBJECT -m MAIL_MESSAGE -F ATTACHMENT]
Mandatory arguments to long options are mandatory for short options too.
-f, --from= Sets the name of the "from" person (i.e., the envelope sender of the mail).
-t, --to= Addressee's address. -t "test@test.com,test1@test.com".
-u, --user= Login SMTP server username.
-p, --pass= Login SMTP server password.
-S, --subject= Mail subject.
-m, --msg= Mail message.-m "msg, ......."
-F, --file= Attachment file name.
-h, --help Help documen.
""" % sys.argv[0]
        sys.exit(3)
    try:
        options, args = getopt.getopt(sys.argv[1:], "hs:f:t:u:p:S:m:F:",
                                      "--help --server= --from= --to= --user= --pass= --subject= --msg= --file=")
    except getopt.GetoptError:
        usage()
        sys.exit(3)
    server = None
    from_addr = None
    to_addr = None
    username = None
    password = None
    subject = None
    filename = None
    msg = None
    for name, value in options:
        if name in ("-h", "--help"):
            usage()
        if name in ("-s", "--server"):
            server = value
        if name in ("-f", "--from"):
            from_addr = value
        if name in ("-t", "--to"):
            to_addr = value
        if name in ("-u", "--user"):
            username = value
        if name in ("-p", "--pass"):
            password = value
        if name in ("-S", "--subject"):
            subject = value
        if name in ("-m", "--msg"):
            msg = value
        if name in ("-F", "--file"):
            filename = value
    if server and from_addr and to_addr and username and password:
        test = SendMail(server, from_addr, to_addr, username, password)
        test.send(msg, subject, filename)
    else:
        usage()