1.后台自動發郵件
1)首先設置郵件參數,這里寫在configuration里面
<appSettings> <add key="SMTP" value="smtp.office365.com" /> <add key="Port" value="587" /> <add key="username" value="xxx@microsoft.com" /> <add key="password" value="#EDC4rfv" /> <add key="SmtpDeliveryMethod" value="Network" /> <add key="EnableSsl" value="true" /> <add key="IsBodyHtml" value="false" /> </appSettings>
示例使用的是微軟郵箱,其他郵件參數可以自行百度
2)在后台代碼中添加如下語句
try { string date = DateTime.Now.ToString("R").Split(',')[1]; date = date.Split(' ')[1] + '-' + date.Split(' ')[2] + '-' + date.Split(' ')[3]; string mailto = "xxx@microsoft.com"; MailMessage mail = new MailMessage(); mail.From = new MailAddress(ConfigurationManager.AppSettings["username"]);// mail.To.Add(mailto); mail.Subject = "Subject " + DateTime.Now.ToLongDateString().ToString(); ; mail.Body = "Test Email"; mail.IsBodyHtml = bool.Parse(ConfigurationManager.AppSettings["IsBodyHtml"]);//mail body是否為html string username = ConfigurationManager.AppSettings["username"];// string password = ConfigurationManager.AppSettings["password"];// using (SmtpClient SmtpServer = new SmtpClient(ConfigurationManager.AppSettings["SMTP"]))// { SmtpServer.Port = int.Parse(ConfigurationManager.AppSettings["Port"]);// SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network; SmtpServer.Credentials = new System.Net.NetworkCredential(username, password); SmtpServer.EnableSsl = bool.Parse(ConfigurationManager.AppSettings["EnableSsl"]);// SmtpServer.Send(mail); } } catch (Exception ex) { Console.Write("Send Fail"); Console.Write(ex.Message); }
這里需要引用 System.Configuration;(第一步中在config里面設置的參數讀取)和System.Net.Mail;
程序運行后會直接發送郵件到mailto不需要本地安裝outlook
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2.調用本地outlook打開郵件並注入郵件內容(在發布到服務器上之后並不怎么好用,微軟好像並不支持將outlook在無人監控的服務器上automation的做法)
在NuGet 包中安裝 Microsoft.Office.Interop.Outlook 並using Outlook = Microsoft.Office.Interop.Outlook;
Outlook.Application olApp = new Outlook.Application(); Outlook.MailItem mailItem = (Outlook.MailItem)olApp.CreateItem(Outlook.OlItemType.olMailItem); //set email to , email Subject , email CC mailItem.To = "xxx@microsoft.com"; // mailItem.CC = ""; mailItem.Subject = "C#_SendEmail_Test"; mailItem.Attachments.Add(@"D:\C#_Learn\Test.txt");//附件 //set the body mailItem.BodyFormat = Outlook.OlBodyFormat.olFormatRichText; string content = @"<html></html>"; mailItem.HTMLBody = content;//這里發送的是html,其余格式也可以 //mailItem.Display(mailItem);//不直接發送將這行取消注釋 //((Outlook._MailItem)mailItem).Send();//直接發送將這行取消注釋
不直接發送 outlook會彈出一個郵件以供編輯 手動發送 如下圖
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3.使用js調用本地的outlook沒有深入研究,只知道可以打開並注入內容 不知道可不可以直接發送,以下是使用js打開outlook並注入內容的方法(參考http://www.cnblogs.com/LiveWithIt/p/5937049.html)
<a href="mailto:xxx@xxx.com?subject=Subject&cc=CC&body=Body">send mail</a>
在第一個參數(mailto)后面添加?,其他參數之間用&連接。
mailto支持以下幾種參數:
局部效果圖如下所示:
根據參考鏈接提供一個示例:
html:
<ul class="email"> <li><input type="text" name="name" placeholder="Name"></li> <li><input type="text" name="email" placeholder="Email Address"></li> <li><input type="text" name="number" placeholder="Phone Number"></li> <li class="message"><textarea name="message" placeholder="Message"></textarea> </li> <button class="btn btn-define" onclick="sendEmail()">Submit</button> <a href="mailto" id="send"></a> </ul>
js:
function sendEmail(){ var name=$("[name='name']").val(), email=$("[name='email']").val(), number=$("[name='number']").val(), message=$("[name='message']").val(), body="My Name is: "+name+"%0a%0d" +"My Email Address is: "+email+"%0a%0d" +"My Phone Number is: "+number+"%0a%0d" +"Message:"+"%0a%0d"+message; $("#send").attr("href","mailto:mamengyi1121@163.com?body="+body); document.getElementById("send").click(); }
使用js來填充emailbody 是否可以兼容html格式在這里不討論,但是經過本人測試在我的電腦上不可以,%0a%0d是UTL編碼用來實現換行 取代<br />
效果圖如下:
(聽說nodejs可以實現)先去研究 后續再寫