您的位置:首页 > 编程语言 > C#

c# 发送SMTP邮件

2016-03-27 00:00 399 查看
摘要: 这里演示最常见的发送qq邮件

一.写在前面

之前很早就想实现以下如果发邮件的问题。因为很多软件或者网站的注册都需要使用到邮箱注册和密码找回。然后不知道是参数格式不对还是什么原因,一直发送不成功。表示很捉急。如今又重新拾起来了。虽然中间出了点岔子,把电脑给玩坏了。dns解析域名有问题了导致无法上网了。不过现在一切恢复如初。并且发邮件的功能也很好的实现了。现在与大家分享。

二.代码片段

/// <summary>
/// 发送邮件
/// </summary>
/// <param name="Dep_Email">收件人邮箱格式:"收件人姓名1<1992113422@qq.com>;收件人姓名2<4342343@qq.com>"</param>
/// <param name="Mis_Name">"邮件主题"</param>
/// <param name="Mis_Describe">邮件内容</param>
/// <param name="File_Path">附件名(含路径)</param>
/// <param name="appendinfo">对附件的说明</param>
/// <returns></returns>
public static string MailSending(string Dep_Email, string Subject, string Mis_Describe, string FileName,string appendinfo="")
{
string MailUser = ConfigurationManager.AppSettings["MailUser"].ToString();//发件人的邮箱地址;如:7234@qq.com
string MailName = ConfigurationManager.AppSettings["MailName"].ToString();//发件人名字
string MailHost = ConfigurationManager.AppSettings["MailHost"].ToString();//邮件服务器名字;qq的话,为:smtp.qq.com
string MailPwd = ConfigurationManager.AppSettings["MailPwd"].ToString();//为授权码(在qq邮箱首页里面开启smtp服务后,会生成授权码;
MailAddress from = new MailAddress(MailUser, MailName);
MailMessage mail = new MailMessage();
mail.Subject = Subject;
mail.From = from;
try
{
string[] mailNames = (Dep_Email).Split(new char[]
{
';'
});
string[] array = mailNames;
for (int i = 0; i < array.Length; i++)
{
string name = array[i];
if (name != string.Empty)
{
string displayName;
string address;
if (name.IndexOf('<') > 0)
{
displayName = name.Substring(0, name.IndexOf('<'));
address = name.Substring(name.IndexOf('<') + 1).Replace('>', ' ');
}
else
{
displayName = string.Empty;
address = name.Substring(name.IndexOf('<') + 1).Replace('>', ' ');
}
mail.To.Add(new MailAddress(address, displayName));
}
}
mail.Body = Mis_Describe;
mail.BodyEncoding = Encoding.UTF8;
mail.IsBodyHtml = true;
mail.Priority = MailPriority.Normal;
FileStream fs=null;
if (FileName != "")
{
fs = new FileStream(FileName, FileMode.Open, FileAccess.Read);//如果不使用文件流,资源无法被释放

mail.Attachments.Add(new Attachment(fs, appendinfo));

mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
}
SmtpClient client = new SmtpClient();

client.Host = MailHost;
client.Port = 587;
client.UseDefaultCredentials = false;
client.EnableSsl = true;
client.Credentials = new NetworkCredential(MailUser, MailPwd);

client.DeliveryMethod = SmtpDeliveryMethod.Network;
mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
client.Send(mail);
if(fs!=null)
fs.Close();//关闭流,以便其他操作能够打开该文件资源
}
catch (SmtpFailedRecipientException ex)
{
string msg = "";
msg += "=====================发送邮件失败============";
if (!string.IsNullOrEmpty(ex.FailedRecipient))
msg += "\r\n" +"失败邮箱:" +ex.FailedRecipient;
msg += "\r\n" + "Message:"+ex.Message;
msg += "\r\n" + "Source:" + ex.Source;
LogHelper log = new LogHelper("邮件日志");
log.WriteLog(msg);
return "失败啦!请查看日志!";
}
return mail.ToString();
}


三.需要注意的地方

上面的代码基本上都已经被详细的注释了。按照格式输入参数应该是没有什么问题啦。不过呢,在使用上面的代码之前得做一个设置。就是我们得进入我们的qq邮箱首页,找到顶部的设置按钮,单击它,选择账户选项卡。然后下拉,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。将其所得服务都开启。开启完了后。下面有一个温馨提示:温馨提示:登录第三方客户端时,密码框请输入“授权码”进行验证。生成授权码。

点击生成授权码。然后拿到授权码后,就得到了我们代码中的Mailpwd,所以这里不要想当然觉得是你的qq号的登陆密码。

四.一些步骤图如下:









祝你好运!不懂得加qq:739462304@qq.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  发邮件