接上代碼:
//回執(zhí)地址
var Receipt="填寫你需要回執(zhí)的地址";
//實例化兩個必要的
MailMessage mail=new MailMessage();
SmtpClient smtp=new SmtpClient();
//發(fā)送郵箱地址
mail.From=new MailAddress("發(fā)送郵箱地址");
//收件人(可以群發(fā))
mail.To.Add(new MailAddress("1402173344@qq.com"));
//是否以HTML格式發(fā)送
mail.IsBodyHtml=true;
//主題的編碼格式
mail.SubjectEncoding=Encoding.UTF8;
//郵件的標(biāo)題
mail.Subject="測試一下發(fā)件的標(biāo)題";
//內(nèi)容的編碼格式
mail.BodyEncoding=Encoding.UTF8;
//郵件的優(yōu)先級
mail.Priority=MailPriority.Normal;
//發(fā)送內(nèi)容,帶一個圖片標(biāo)簽,用于對方打開之后,回發(fā)你填寫的地址信息
mail.Body=@"獲取打開郵件的用戶IP,圖片由服務(wù)器自動生成:<img src='" + Receipt + "'>";
//收件人可以在郵件里面
mail.Headers.Add("Disposition-Notification-To", "回執(zhí)信息");
//發(fā)件郵箱的服務(wù)器地址
smtp.Host="smtp.163.com";
smtp.DeliveryMethod=SmtpDeliveryMethod.Network;
smtp.Timeout=1000000;
//是否為SSL加密
smtp.EnableSsl=true;
//設(shè)置端口,如果不設(shè)置的話,默認(rèn)端口為25
smtp.Port=25;
smtp.UseDefaultCredentials=false;
//驗證發(fā)件人的憑據(jù)
smtp.Credentials=new System.Net.NetworkCredential("郵箱賬號", "郵箱憑據(jù)");
try
{
//發(fā)送郵件
smtp.Send(mail);
Console.WriteLine("發(fā)送成功");
}
catch (Exception e)
{
Console.WriteLine("發(fā)送失敗:" + e.Message);
}
作為一個實習(xí)生,入職的第一家公司碰到的一點小挫折,找了好久都沒有找到方法,就詢問了公司前輩,以及帶我的大佬
當(dāng)然,大佬們的幫助給了我很大的啟發(fā),就想著先寫下來,省的以后用得著的時候給忘記了
也可以算是記錄一下自己剛?cè)肼殨r候?qū)W習(xí)的步伐,
總之,這是一個小技巧,大佬看過之后,請多多指點。
子郵件能讓訪問者方便地向網(wǎng)站提供反饋或聯(lián)系信息。它可以自動填寫抄送和密件抄送,甚至能自動填充主題行。下面介紹如何定制 Mailto功能。
<a href="mailto:stephen.zhaoyf@163.com">點擊這里發(fā)郵件給站長!</a>
當(dāng)訪問者點擊這個鏈接時,會調(diào)用他們客戶端的email程序,并在收件人框中自動填上收件人的地址。下面,我們將分以下幾步介紹如何增加mailto的功能。
第一步:
創(chuàng)建一個基本的mailto,包含收件人的地址。注意:后面的參數(shù)符需要采用英文的符號
第二步:
在收件人地址后用“?cc="開頭,你可以填寫抄送(CC:)地址,下面這個例子將實現(xiàn)該功能:
<a href="mailto:stephen.zhaoyf@163.com?cc=guest@163.net">點擊這里發(fā)郵件給站長并“抄送”給guest!</a>
第三步:
就像下面這個例子一樣,緊跟著抄送地址之后,寫上"&bcc=",就可以填上密件抄送(BCC)地址了 (在添加這些功能時,第一個功能以"?"開頭,后面的以"&"開頭)。
<a href="mailto:stephen.zhaoyf@163.com?cc=guest@163.net&bcc=guest@163.net">點擊這里發(fā)郵件給站長并同時“抄送”、“暗送”給guest!</a>
還可以同時發(fā)信給N個人!地址之間用逗號分開:
<a href="mailto:stephen.zhaoyf@163.com,guest@163.net,guest1@163.net">點擊這里同時發(fā)送N個郵件!</a>
第四步:
用?subject=或者&subject(當(dāng)前面還有抄送或暗送時使用)填上主題。
<a href="mailto:stephen.zhaoyf@163.com?subject=不好意思,只是做個實驗!">點擊這里發(fā)送有主題的郵件!</a>
更加夸張的是連郵件內(nèi)容都可以事先寫好!
<a href="mailto:stephen.zhaoyf@163.com?subject=不好意思,只是做個實驗!&body=特別無聊,所以發(fā)現(xiàn)這么一個功能">這個郵件地址、內(nèi)容都有了!以后可就懶了!</a>
Mailto后為收件人地址,cc后為抄送地址,bcc后為密件抄送地址,subject后為郵件的主題,body后為郵件的內(nèi)容,如果Mailto后面同時有多個參數(shù)的話,第一個參數(shù)必須以“?”開頭,后面的每一個都以“&”開頭。下面是一個完整的實例:
Mailto:aaa@xxx.com?cc=bbb@yyy.com&bcc=ccc@zzz.com&subject=主題&body=郵件內(nèi)容
比如調(diào)用個下載程序,當(dāng)下載的URL中含有中文的時候,無法下載,比如:
http://www.huachu.com.cn/itbook/booklist.asp?tsmc=匯編
試著用 .net 中的 Server.UrlEncode 函數(shù)進(jìn)行轉(zhuǎn)換。但是這樣仍然不行,試驗了很久也沒有找到原因。后來懷疑 ASP.net中的Server.UrlEncode函數(shù)和ASP中的Server.URLEncode函數(shù)返回的值竟然不一樣。一實驗,竟然確實是。
試驗代碼:
ASP.net 中 如下代碼?
Response.Write(Server.UrlEncode("匯編")); ?返回: %e6%b1%87%e7%bc%96
ASP 中 如下代碼 Response.Write Server.URLEncode("匯編")?? 返回: %BB%E3%B1%E0
產(chǎn)生這個問題的原因:ASP.net 中的 Server.UrlEncode 默認(rèn)是按照 UTF-8 編碼方式進(jìn)行處理的。而ASP中是按照本地設(shè)置編碼方式進(jìn)行處理的。
如果你在 ASP.net 下采用如下的編碼: ASP 和 ASP.net 的結(jié)果就會一樣:
Response.Write(HttpUtility.UrlEncode("匯編",Encoding.Default));
采用:Response.Write(HttpUtility.UrlEncode("匯編",Encoding.UTF8));? 返回的就是 Response.Write(Server.UrlEncode("匯編"));?? 返回的結(jié)果。
現(xiàn)在生活節(jié)奏加快,人們之間交流方式也有了天差地別,為了更加便捷的交流溝通,電子郵件產(chǎn)生了,眾所周知,電子郵件其實就是客戶端和服務(wù)器端發(fā)送接受數(shù)據(jù)一樣,他有一個發(fā)信和一個收信的功能,電子郵件的通信協(xié)議為SMTP ,POP3,IMAP,而且他們都屬于tcp/ip協(xié)議,像我們經(jīng)常用到的QQ郵箱,網(wǎng)易郵箱,這些都是同樣的模式。
編輯器:sublime text 3
模塊:smtplib和email
pip install smtplib
pip install email
注:這里有一個小坑,就是安裝smtplib不能像上面那樣直接安裝,那樣會安裝不上的,你得先安裝PyEmail,因為你smtplib 集成在了這個模塊中了,就好比pillow模塊集成在PIL中一樣的,另一個正常安裝即可。
任何一個郵箱你如果想要發(fā)郵件,你得先開通以上服務(wù),讓郵件能夠通信,而且還得有郵箱授權(quán)碼,比如說QQ郵箱:
打開QQ郵箱,選擇設(shè)置--------賬戶,然后開啟服務(wù)。
開啟服務(wù)后,點擊生成授權(quán)碼,保存好授權(quán)碼。獲取授權(quán)碼只需要你用注冊手機號發(fā)短信或者動態(tài)令牌即可。
import smtplib
sm=smtp.SMTP # 初始化連接
sm.connect('郵件服務(wù)器地址','端口') #建立連接
sm.login('郵箱賬號','郵箱密碼/授權(quán)碼') #登陸賬戶
sm.sendmail('郵件發(fā)送方','郵件接受方','郵件內(nèi)容') #發(fā)送郵件
sm.quit #關(guān)閉連接,結(jié)束郵件服務(wù)
了解了以上的知識后,我們來試著登陸一下吧,我以QQ郵箱為例:
有這樣的標(biāo)識表示登陸成功,順便強調(diào)一句,在這里我為什么沒有配置郵件服務(wù)器端口,因為服務(wù)器已經(jīng)幫我們配置好了,默認(rèn)的都是25號端口,如果你擔(dān)心郵件的安全問題,比如會被黑客截胡,你也可以使用ssl鏈接傳輸:
同樣它的端口也是默認(rèn)配置好了,他的端口號為465,為了安全,咱們選擇這項。
這里我們需要用到email模塊,我們都知道,郵件一般可以發(fā)很多東西,比如說文本,圖片,文件等等,那么我們來看看吧。
導(dǎo)入模塊
from email.mime.text import MIMEText
填充文本
在此之前我們得知道它的具體用法:
MIMEText(‘郵件內(nèi)容’,‘類型’, '編碼')
郵件內(nèi)容為字符串
類型: text/plain text/html
編碼 : utf-8 gbk
構(gòu)造文本
MIMEText('hello','text/plain','utf-8')
構(gòu)造超文本
MIMEText('<a href='www.baidu.com'>點擊此處有驚喜</a>','text/html','utf-8')
下面我們來實際操作下吧。
非常成功收到了郵件了。正是2091500484這個郵箱給我發(fā)的。當(dāng)然我們這樣只是實現(xiàn)了最簡單的功能,
我們需要將它格式規(guī)范下,比如給它添加個開頭結(jié)尾什么的。我們需要導(dǎo)入構(gòu)建郵件完整內(nèi)容的模塊:
from email.header import Header
然后設(shè)置頭部,內(nèi)容,尾部
msg1['From']=Header('你是豬嗎') #設(shè)置發(fā)件人昵稱
msg1['To']=Header('hwhrr123321@163.com') #設(shè)置收件人昵稱
msg1['Subject']=Header('我是豬') #設(shè)置標(biāo)題
可以看到,是不是覺得很有趣了,快來試試吧,哈哈哈。。。
發(fā)了文本后我們還想發(fā)一張圖片,那該怎么辦呢?莫慌,此時需要先導(dǎo)入發(fā)圖片的模塊:
from email.mime.image import MIMEImage
然后我們在讀取圖片文件將它添加到郵件中去。
ff=open('1.jpg','rb').read #打開文件
fd=MIMEImage(ff,'subtype') #初始化
fd.add_header('Content-ID','1.jpg') #添加到頭部
可以看到圖片并沒有顯示出來,那么這是怎么回事,哦,原來圖片是依托附件而存在的,要么是html要么是附件,但是兩者都需要附件模塊的支持,下面我們導(dǎo)入附件模塊:
from email.mime.multipart import MIMEMultipart
1.將圖片插入到html中
也就是將圖片插入到正文部分,而非附件的形式。
msg3=MIMEMultipart('related')
msg3['From']='你是豬嗎'
msg3['To']='hwhrr123321@163.com'
msg3['Subject']='我是豬'
msg4=MIMEMultipart('alternative') #構(gòu)建一個附件
msg3.attach(msg4) #將附件引入到另一個附件
text="""
<html>
<body>
<img src='cid:img' tittle='I am pig'>
</body>
</html>
"""
msg4.attach(MIMEText(text, 'html', 'utf-8')) #將html插入到附件中
ff=open('2.jpg','rb')
img=MIMEImage(ff.read) #將圖片讀取到附件中
ff.close
img.add_header('Content-ID','<img>') #添加圖片頭部
msg3.attach(img) #將圖片添加到附件
sm.sendmail('2091500484@qq.com','hwhrr123321@163.com',msg3.as_string) #發(fā)送
sm.quit
可以看出,過程還是比較復(fù)雜的,比單純附件添加圖片麻煩點,主要是嵌套了一層附件結(jié)構(gòu)。
這個比較好實現(xiàn)。如圖:
在發(fā)送文件前,我們要考慮的一個問題是,我們讀取它要以二進(jìn)制的形式,然后再將它添加到附件中,搞懂了這個就好辦了。
這里我們需要構(gòu)造一個base64的一個數(shù)據(jù)流讀取文件:
msg6=MIMEMultipart
txt=MIMEText(open('fd.txt','rb').read, 'base64', 'utf-8')
txt["Content-Type"]='application/octet-stream'
txt["Content-Disposition"]='attachment; filename="fd.txt" '
msg6.attach(txt)
最后就成功將文件添加到了附件中了。
以上便是我對郵件發(fā)送的所有感悟了,另外如果你想將郵件傳輸時的過程直觀展示出來的話只需在郵件服務(wù)器登陸的前一句加上:
sm.set_debuglevel(1)
這樣便可以將所有傳輸過程打印在終端了。通過對郵件的學(xué)習(xí),可以極大地便利我們的生活,你可以使用郵件來給你設(shè)置一個計劃表,通過程序?qū)崿F(xiàn),每天按時發(fā)送郵件,是不是很高逼格了,希望今天這篇文章能讓大家對郵件有個全新的認(rèn)識。
微軟于年初推出了自己的Python教程,我們將其漢化提供給大家,歡迎大家收藏關(guān)注哦~(已經(jīng)漢化完成的20集,我們?nèi)崭?集,未完成部分我們盡快更新)
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。