文章内容
2017/11/4 13:50:54,作 者: 黄兵
C# 发送邮件的三种组件
相关基础参数信息
//发件服务器账号密码(启用了授权码密码则为授权码) //中间如果切换过授权码,最好修改密码为邮箱实际密码,发送邮件后会提示使用授权码,重新生成授权码,更换为新的授权码即可 //全局 string serverName = "test@qq.com"; string serverPwd = "testpwd"; //发送成功提示 private void Smtp_SendCompleted(object sender, AsyncCompletedEventArgs e) { MessageBox.Show("邮件已发送成功"); } //点击发送按钮 private void btnSend_Click(object sender, EventArgs e) { if (txtServerName.Text.Trim() == "") { MessageBox.Show("请输入发送人邮箱地址"); return; } if (txtReceiveName.Text.Trim() == "") { MessageBox.Show("请输入收件人邮箱地址"); return; } if (txtMailContent.Text == "") { MessageBox.Show("请输入邮件内容"); return; } //处理收件人 List<string> receivelist = new List<string>(); string[] templist = txtReceiveName.Text.Split('|'); foreach (string name in templist) { if (name.Trim() != "") { receivelist.Add(name); } } //处理附件 List<string> filelist = new List<string>(); foreach (string filepath in listboxFile.Items) { if (filepath.Trim() != "") { filelist.Add(filepath); } } //是否加密发送 if (!chkIsEncrypt.Checked) { SendMailBySmtp(receivelist, filelist); } else { /* System.Net.Mail支持Explicit SSL SSL加密分为两种:Explicit SSL(显示加密)和Implicit SSL(隐式加密) 大部分邮箱支持Explicit SSL,而QQ邮箱支持Implicit SSL 所以才有了这三种邮件发送方式 */ //常规SSL加密发送 SendMailByExplicitSSLSmtp(receivelist, filelist); //System.Web.Mail.MailMessage参数方式设置加密发送 SendMailByImplicitSSLSmtp_Web(receivelist, filelist); //CDO.Message方式加密发送 //SendMailByImplicitSSLSmtp_CDO(receivelist, filelist); } }
System.Net.Mail组件发送
void SendMailByExplicitSSLSmtp(List<string> receivelist, List<string> filelist) { //发件服务器身份凭证 NetworkCredential network = new NetworkCredential(); network.UserName = serverName; network.Password = serverPwd; //发件人邮箱地址(发件人地址必须与发件服务器账号地址一致) MailAddress sendermailaddress = new MailAddress(serverName, "发件人", Encoding.UTF8); //发信人邮箱地址(发信人地址不必与发件服务器地址一致,那么发件人为邮件的代发人(需要注意,不能为收件人地址,容易被识别为垃圾邮件)) MailAddress frommailaddress = new MailAddress(txtServerName.Text.Trim() + "@" + comboxMailType.SelectedItem.ToString(), "发信人", Encoding.UTF8); //邮件传输协议 SmtpClient smtp = new SmtpClient(); //smtp方式发送 smtp.Credentials = network; smtp.EnableSsl = true; smtp.Host = "smtp.qq.com"; smtp.Port = 587; //465 //发送成功后执行操作 smtp.SendCompleted += Smtp_SendCompleted; //邮件信息 MailMessage mailmsg = new MailMessage(); mailmsg.Priority = MailPriority.Normal; mailmsg.Subject = txtMailHeader.Text.Trim(); mailmsg.Body = txtMailContent.Text; //发件人地址必须与发件服务器地址一致 mailmsg.Sender = sendermailaddress; //发信人地址可以不同,然后邮件的代发人为发件人(需要注意,不能为收件人地址,容易被识别为垃圾邮件) mailmsg.From = frommailaddress; //邮件接收人 foreach (string receivename in receivelist) { mailmsg.To.Add(receivename); } //邮件抄送() //mailmsg.CC.Add(""); //密件抄送 //mailmsg.Bcc.Add("") //附件集合 foreach (string filepath in filelist) { Attachment att = new Attachment(filepath); mailmsg.Attachments.Add(att); } smtp.SendMailAsync(mailmsg); }
System.Web.Mail组件发送
void SendMailByImplicitSSLSmtp_Web(List<string> receivelist, List<string> filelist)
{
System.Web.Mail.MailMessage mailmsg = new System.Web.Mail.MailMessage();
mailmsg.Priority = System.Web.Mail.MailPriority.Normal;
mailmsg.Subject = txtMailHeader.Text.Trim();
mailmsg.BodyFormat = System.Web.Mail.MailFormat.Html;
mailmsg.Body = txtMailContent.Text;
mailmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); //身份验证
mailmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", serverName); //邮箱登录账号,这里跟前面的发送账号一样就行
mailmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", serverPwd); //这个密码要注意:如果是一般账号,要用授权码;企业账号用登录密码
mailmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 465);//端口(587)
mailmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");//SSL加密
//发件人邮箱地址(发件人地址必须与发件服务器账号地址一致)
mailmsg.From = serverName;
//抄送副本邮件地址
//mailmsg.Cc = "";
//匿名副本邮件地址
//mailmsg.Bcc = "";
//附件集合
foreach (string filepath in filelist)
{
Attachment att = new Attachment(filepath);
mailmsg.Attachments.Add(att);
}
System.Web.Mail.SmtpMail.SmtpServer = "smtp.qq.com";
/*
经测试System.Web.Mail.MailMessage方式发送的邮件接收人不能是发件人地址,否则会提示“与服务器的传输连接失败”
*/
//邮件接收人
try
{
foreach (string receivename in receivelist)
{
mailmsg.To = receivename;
System.Web.Mail.SmtpMail.Send(mailmsg);
}
MessageBox.Show("邮件已发送成功");
}
catch (Exception ex)
{
MessageBox.Show("邮件发送失败");
}
}
CDO.Message组件发送void SendMailByImplicitSSLSmtp_CDO(List<string> receivelist, List<string> filelist)
{
//引入的COM组件
//Microsoft ActiveX Data Objects 6.1 Library(版本可能不同)
//Microsoft CDO for Windows 2000 Library
CDO.Message oMsg = new CDO.Message();
CDO.IConfiguration iConfg;
ADODB.Fields oFields;
iConfg = oMsg.Configuration;
oFields = iConfg.Fields;
Configuration conf = new ConfigurationClass();
conf.Fields[CdoConfiguration.cdoSendUsingMethod].Value = CdoSendUsing.cdoSendUsingPort;
conf.Fields[CdoConfiguration.cdoSMTPAuthenticate].Value = CdoProtocolsAuthentication.cdoBasic;
conf.Fields[CdoConfiguration.cdoSMTPUseSSL].Value = true;
conf.Fields[CdoConfiguration.cdoSMTPServer].Value = "smtp.qq.com";//必填,而且要真实可用
conf.Fields[CdoConfiguration.cdoSMTPServerPort].Value = 465;//465特有
conf.Fields[CdoConfiguration.cdoSendEmailAddress].Value = "<" + serverName + ">";
conf.Fields[CdoConfiguration.cdoSendUserName].Value = serverName;//真实的邮件地址
conf.Fields[CdoConfiguration.cdoSendPassword].Value = serverPwd; //为邮箱密码,必须真实
conf.Fields.Update();
oMsg.Configuration = conf;
oMsg.HTMLBody = txtMailContent.Text;
//主题
oMsg.Subject = txtMailHeader.Text.Trim();
oMsg.From = serverName;
//邮件抄送()
//mailmsg.CC.Add("");
//密件抄送
//mailmsg.Bcc.Add("")
//附件集合
foreach (string filepath in filelist)
{
oMsg.AddAttachment(filepath);
}
try
{
//邮件接收人
foreach (string receivename in receivelist)
{
oMsg.To = receivename;
oMsg.Send();
}
MessageBox.Show("邮件已发送成功");
}
catch (Exception ex)
{
MessageBox.Show("邮件发送失败");
}
}
评论列表