一、outlook的pop方式,並指定發送人郵箱地址:
需要引入dll:Microsoft.Office.Interop.Outlook
Outlook.Application olApp = new Outlook.Application(); NameSpace ns = olApp.GetNamespace("mapi"); ns.Logon(Missing.Value, Missing.Value, false, true); Outlook.MailItem mailItem = (Outlook.MailItem)olApp.CreateItem(Outlook.OlItemType.olMailItem); mailItem.To = Email; mailItem.Subject = "密碼找回"; mailItem.BodyFormat = Outlook.OlBodyFormat.olFormatHTML; mailItem.HTMLBody = "驗證碼是: " + code + ",請在10分鍾內進行驗證。驗證碼提供給他人可能導致賬號被盜,請勿泄露,謹防被騙。系統郵件請勿回復。"; ; Outlook.Account account = GetAccountForEmailAddress(olApp, autolooksendemail); mailItem.SendUsingAccount = account; ((Outlook._MailItem)mailItem).Send(); ns.Logoff(); mailItem = null; ns = null; olApp = null;
public Outlook.Account GetAccountForEmailAddress(Outlook.Application application, string smtpAddress) { // Loop over the Accounts collection of the current Outlook session. Outlook.Accounts accounts = application.Session.Accounts; foreach (Outlook.Account account in accounts) { logger.Info("Outlook.Account:" + account.SmtpAddress); // When the e-mail address matches, return the account. if (account.SmtpAddress == smtpAddress) { return account; } } throw new System.Exception(string.Format("No Account with SmtpAddress: {0} exists!", smtpAddress)); }
其中指定的郵箱autolooksendemail應該包含在內。若不在,則添加,步驟如下:
1、打開客戶端
2、添加賬戶
不推薦此方式,因為用exchange方式不安全。
二、outlook的smtp方式:
需要引用System.Net.Mail.dll
SmtpClient smtpClient = new SmtpClient() { UseDefaultCredentials = false, DeliveryMethod = SmtpDeliveryMethod.Network, }; smtpClient.Credentials = new NetworkCredential(sendeaccount, autolooksendemailPwd); var message = new MailMessage { From = new MailAddress(autolooksendemail), Sender = new MailAddress(autolooksendemail), Subject = "密碼找回", IsBodyHtml = false }; message.To.Add(Email); message.Body = "驗證碼是: " + code + ",請在10分鍾內進行驗證。驗證碼提供給他人可能導致賬號被盜,請勿泄露,謹防被騙。系統郵件請勿回復。"; smtpClient.Send(message); message.Dispose(); smtpClient.Dispose();
三、qq郵箱的smtp方式:
需要引入System.Net.Mail.dll
SmtpClient client = new SmtpClient("smtp.qq.com"); //實例化一個SmtpClient類 client.UseDefaultCredentials = true; MailMessage mail = new MailMessage(); //實例化一個郵件類 mail.From = new MailAddress("發件人郵箱地址"); //發件人郵箱地址 mail.To.Add(new MailAddress("收件人郵箱地址")); //收件人郵箱地址 mail.Subject = "密碼找回"; //郵件標題 mail.SubjectEncoding = System.Text.Encoding.UTF8; mail.Body = "密碼找回內容"; //郵件內容 mail.BodyEncoding = System.Text.Encoding.UTF8; client.EnableSsl = true; //使用安全加密連接 client.Credentials = new NetworkCredential(sendEmail, AuthorizationCode);//驗證發件人身份(發件人郵箱,郵箱授權碼); client.Send(mail); //發送郵件 mail.Dispose(); mail = null; client.Dispose(); client = null;
四、生成隨機碼:
public static string CreateRandomCode(int length) //生成由數字和大小寫字母組成的驗證碼 { string list = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890"; //list中存放着驗證碼的元素 Random random = new Random(); string code = ""; //驗證碼 for (int i = 0; i < length; i++) //循環6次得到一個偽隨機的六位數驗證碼 { code += list[random.Next(0, list.Length - 1)]; } return code; }
隨機碼一定時間內有效,我采用的是redis。
五、1分鍾后可再次發送郵箱隨機碼
var timer1 = 60; //倒計時 function TimeDown() { $("#timer1").html(timer1); if (timer1 > 0) { setTimeout(function () { TimeDown(); }, 1000); } else if (timer1 <= 0) { timer1 = 61; $("倒計時顯示部分").css("display", "block"); $("發送按鈕顯示部分").css("display", "none"); } --timer1; };