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