本文目錄一覽:
如何在python程序中發郵件
提供以下兩種方式:
利用smtplib,email庫
coding:utf-8
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import sys
reload(sys)
sys.setdefaultencoding(“utf8”)
# 配置收發件人
recvaddress = [‘receiveemail@sina.com’,’receiveemail@qq.com’]
# 163的用戶名和密碼
sendaddr_name = ‘your_email@163.com’
sendaddr_pswd = ‘your_password’
class SendMail:
def __init__(self,recver=None):
“””接收郵件的人:list or tuple”””
if recver is None:
self.sendTo = recvaddress
else:
self.sendTo = recver
def send(self,sub,content,attachcontent):
“””發送郵件”””
self.msg = MIMEMultipart()
#設置發送郵件
self.msg[‘from’] = sendaddr_name
try:
#設置郵箱服務器
smtp = smtplib.SMTP(‘smtp.163.com’,25)
#登錄
smtp.login(sendaddr_name,sendaddr_pswd)
#設置發送主題
self.msg[‘Subject’] = sub
#設置郵件內容
self.msg.attach(MIMEText(content))
#設置郵件附件,將附件的內容attachcontent,寫到filename的文件中,作為附件發送
att1 = MIMEText(attachcontent, ‘base64’, ‘gb2312’)
att1[“Content-Type”] = ‘application/octet-stream’
att1[“Content-Disposition”] = ‘attachment; filename=”testattach.txt”‘#這裡的filename可以任意寫,寫什麼名字,郵件中顯示什麼名字
self.msg.attach(att1)
#發送郵件
smtp.sendmail(self.msg[‘from’], self.sendTo, self.msg.as_string())
smtp.close()
print(u”發送郵件成功”)
except Exception,e:
print(u’發送郵件失敗:’+str(e))
raise
#調用
s = SendMail()
subject = “主題”
content = “這裡是郵件內容”
attachcontent = “這裡是附件哦”
s.send(subject,content,attachcontent)
2.利用webpy自帶的email模塊
首先要安裝web.py的依賴庫
pip install web.py
#coding:utf-8
import web
##### email服務器配置 #####
web.config.smtp_server = ‘smtp.sina.com’
web.config.smtp_port = 25
web.config.smtp_username = ‘你的email前綴,@前的字符串’
web.config.smtp_password = ‘你的密碼’
web.config.smtp_starttls = True
send_from=”youremail@sina.com”
receiveemailaddr = [“receiveemail@qq.com”,”receiveemail@163.com”]
subject=u’這裡是主題’
message=u’這裡是郵件的內容’
def sendemail(sendfrom,sendto,subject,message,cc=None, bcc=None,headers=({‘User-Agent’: ‘webpy.sendmail’, ‘X-Mailer’: ‘webpy.sendmail’,})):
try:
web.sendmail(send_from,sendto,subject,message,cc=cc,bcc=bcc)
print “郵件發送成功”
except Exception,e:
print(str(e))
#調用
sendemail(send_from,receiveemailaddr,subject,message)
Python向多人發送、抄送帶附件的郵件(含詳細代碼)
python要發送帶附件的郵件,首先要創建MIMEMultipart()實例,然後構造附件,如果有多個附件,可依次構造,最後使用smtplib.smtp發送。
步驟:
(1)設置服務器所需信息(ps:部門郵箱密碼為授權碼,需自行登錄相應郵箱設置授權碼)
(2)設置email信息
(3)附件部分
(4)登錄郵箱並發送郵件
附上源碼:
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的博客主頁 》
原創文章,作者:JJAE,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/148996.html