首页 > 编程知识 正文

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

时间:2023-12-24 12:11:50 阅读:321584 作者:HIQF

本文目录一览:

如何用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)

(1) 将工长及其邮箱地址存为CSV文件的两列,python中将其读取为字典形式,存储以供后续查询邮箱地址。

(2) 遍历文件夹中的附件(.xlsx类型文件),对其进行两种操作,一方面将其名字(不带路径和后缀)提取出来,作为邮件主题(Subject),并对Subject进一步划分,得到其中的人名(工长);另一方面,将其传入MIMEbase模块中转为邮件附件对象。

(3) 由上述得到的人名(name),在字典形式的通讯录中,查找相应的地址(value),即为收件人名称和地址

(4) 利用python中的email模块和smtp模块,登录自己的邮箱账号,再对每个附件,得到的收件人名和地址,添加附件,发送邮件。done

在设计过程中有几点需要注意

(1) 有时一个邮件地址对应两个人名,此时应该在CSV文件中分为两行存储,而不是将两个人名存为同一个键;

(2)有账单.xlsx文件,通讯录里却没存储此人记录,程序应该打印提示没有通讯记录的人名,且不能直接退出,要保证员工看到此提示,此第一版程序还有解决此问题;

(3)此程序发送的邮件内容为纯文本,若要求邮件内容有不同格式(如部分加粗,部分红色),还有小部分需要每次更改的地方(如邮件内容包含当前月份),如何解决?(这就是第二种邮件内容,“预算款”);

(4)重名的,暂时还没碰到,程序中也没给出解决方案。

第一版到此,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('邮件发送成功!')

7、登录接收端邮箱,查看是否发送成功,如下图:

8、如果能成功收到邮件的话就说明完成了。

如何在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,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),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()

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。