在阿里雲用python發送郵件(Python自動發送郵件)

本文目錄一覽:

用Python發送郵件,可以群發,帶有多個附件

””’ 

函數說明:Send_email_text() 函數實現發送帶有附件的郵件,可以群發,附件格式包括:xlsx,pdf,txt,jpg,mp3等 

參數說明: 

    1. subject:郵件主題 

    2. content:郵件正文 

    3. filepath:附件的地址, 輸入格式為[“”,””,…] 

    4. receive_email:收件人地址, 輸入格式為[“”,””,…] 

”’  

def Send_email_text(subject,content,filepath,receive_email):  

    import smtplib  

    from email.mime.multipart import MIMEMultipart   

    from email.mime.text import MIMEText   

    from email.mime.application import MIMEApplication  

    sender = “發送方郵箱”  

    passwd = “填入發送方密碼”  

    receivers = receive_email   #收件人郵箱  

      

    msgRoot = MIMEMultipart()   

    msgRoot[‘Subject’] = subject  

    msgRoot[‘From’] = sender  

      

    if len(receivers)1:  

        msgRoot[‘To’] = ‘,’.join(receivers) #群發郵件  

    else:  

        msgRoot[‘To’] = receivers[0]  

      

    part = MIMEText(content)   

    msgRoot.attach(part)  

      

    ##添加附件部分  

    for path in filepath:  

        if “.jpg” in path:  

            #jpg類型附件  

            jpg_name = path.split(“\\”)[-1]  

            part = MIMEApplication(open(path,’rb’).read())   

            part.add_header(‘Content-Disposition’, ‘attachment’, filename=jpg_name)  

            msgRoot.attach(part)  

          

        if “.pdf” in path:  

            #pdf類型附件  

            pdf_name = path.split(“\\”)[-1]  

            part = MIMEApplication(open(path,’rb’).read())   

            part.add_header(‘Content-Disposition’, ‘attachment’, filename=pdf_name)   

            msgRoot.attach(part)  

          

        if “.xlsx” in path:  

            #xlsx類型附件  

            xlsx_name = path.split(“\\”)[-1]  

            part = MIMEApplication(open(path,’rb’).read())   

            part.add_header(‘Content-Disposition’, ‘attachment’, filename=xlsx_name)  

            msgRoot.attach(part)  

              

        if “.txt” in path:  

            #txt類型附件  

            txt_name = path.split(“\\”)[-1]  

            part = MIMEApplication(open(path,’rb’).read())  

            part.add_header(‘Content-Disposition’, ‘attachment’, filename=txt_name)  

            msgRoot.attach(part)  

          

        if “.mp3” in path:  

            #mp3類型附件  

            mp3_name = path.split(“\\”)[-1]  

            part = MIMEApplication(open(path,’rb’).read())   

            part.add_header(‘Content-Disposition’, ‘attachment’, filename=mp3_name)   

            msgRoot.attach(part)  

              

    try:  

        s = smtplib.SMTP()  

        s.connect(“smtp.mail.aliyun.com”) #這裡我使用的是阿里雲郵箱,也可以使用163郵箱:smtp.163.com  

        s.login(sender, passwd)  

        s.sendmail(sender, receivers, msgRoot.as_string())  

        print (“郵件發送成功”)  

    except smtplib.SMTPException as e:  

        print(“Error, 發送失敗”)  

    finally:  

        s.quit()

我用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批量發送郵件–包括批量不同附件

小豬在公司做出納,乾的活卻包括了出納、會計、結算專員等工作,周末都要被無奈在家加班,主要還沒有加班費,簡直是被公司嚴重壓榨。每個月初都要給每個工長發預付款賬單郵件,月中髮結算款賬單。重複性機械工作。

一個及格線上的程序員,最起碼的覺悟就是將重複性的機械工作自動化,於是,在我花了一個多小時,幫她給一部分工長發了一次郵箱後,默默的回來寫了這個腳本。

所以,設計要點就是一個字—— 懶 。

恩,就醬。

經過我觀察,郵件內容分為兩種,這裡先說第一種,「結算款」:

(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程序中發郵件

通過命令行發送郵件,功能強大

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()

如何用python自動發送郵件

注意如果使用qq的smtp轉發功能的話,需要在設置頁面中將該功能打開,然後設定密碼,改密碼就是賦值給下文password中的。

開啟smtp轉發功能文檔

[python] view plain copy

#from email.MIMEText import MIMEText    #old version cannot recongnize by new python

from email.MIMEText import MIMEText

from email.Header import Header

msg = MIMEText(‘hello, send by python’,’plain’,’utf-8′);

from_addr = “*****@qq.com”   #email addresss include domain name

password = “******”        #password

to_addr = “****@qq.com”   # target email address

smtp_server = “smtp.qq.com”       #smtp sever domain for qq is smtp.qq.com

import smtplib

server = smtplib.SMTP(smtp_server,25);

server.set_debuglevel(1)

server.login(from_addr,password);

server.sendmail(from_addr,[to_addr], msg.as_string())

server.quit()

上面這個是沒有主題的,有主題的話建議採用下面這個代碼

下面是連續發送有主題的文件10封

[python] view plain copy

from email.Header import Header

from email.MIMEText import MIMEText

from email import encoders

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 = “*****@qq.com”   #email addresss include domain name

password = “******”        #password

to_addr = “****@qq.com”   # target email address

smtp_server = “smtp.qq.com”       #smtp sever domain for qq is smtp.qq.com

for num in range(1,11):

msg = MIMEText(‘hello, send by Tom’, ‘plain’, ‘utf-8’);

msg[‘From’] = _format_addr(‘Tom %s’ % from_addr)

msg[‘To’] = _format_addr(‘addministrator %s’ % to_addr)

msg[‘Subject’] = Header(‘The greeting from Tom’,’utf-8′).encode()

server = smtplib.SMTP(smtp_server,25)

server.set_debuglevel(1)

server.login(from_addr, password)

#server.sendmail(from_addr, [to_addr], msg.as_string())

server.sendmail(from_addr, [to_addr], msg.as_string())

server.quit()

原創文章,作者:RWMVB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/129770.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RWMVB的頭像RWMVB
上一篇 2024-10-03 23:27
下一篇 2024-10-03 23:27

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論