在写代码之前,我们需要到我们的邮箱服务商的后台设置一下启动POP3服务。我们以163邮箱为例
在开启POP3服务时,邮箱服务商会提供一个“授权密码”,请一定要保管好这个密码,我们想通过代码发邮件就靠这个密码了,而不是我们日常登陆邮箱的密码。
- Dim client As System.Net.Mail.SmtpClient = New System.Net.Mail.SmtpClient()
- client.Host = "smtp.163.com"
- client.UseDefaultCredentials = False
- '授权密码是指开通POP3服务时服务商提供的授权密码,不是登陆邮箱的密码
- client.Credentials = New System.Net.NetworkCredential("wangjian6931@163.com", "授权密码")
- client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
- Dim message As System.Net.Mail.MailMessage = New System.Net.Mail.MailMessage()
- '发送邮箱
- message.From = New System.Net.Mail.MailAddress("wangjian6931@163.com")
- '收件箱,可以添加多个
- message.[To].Add("443100019@qq.com")
- '邮件标题
- message.Subject = "测试"
- '邮件正文
- message.Body = "用自己写的软件发的邮件!"
- '邮件编码
- message.BodyEncoding = System.Text.Encoding.UTF8
- '邮件正文是否HTML
- message.IsBodyHtml = True
- '添加附件
- Dim data As New System.Net.Mail.Attachment("e:\a.jpg", System.Net.Mime.MediaTypeNames.Application.Octet)
- message.Attachments.Add(data)
-
- Try
- '发送邮件
- client.Send(message)
- MessageBox.Show("Email successfully send.")
- Catch ex As Exception
- MessageBox.Show("Send Email Failed." & ex.ToString())
- End Try
复制代码
因为像阿里云之类的云服务器是禁用常规SMTP服务器的邮件端口25的,所以上面的代码如果放在云服务器上可能会无法发送。这时候我们需要修改一下自己的代码。
相关参考资料:C# 服务器发送邮件失败实例分析 (51sjk.com)
记录一下C#使用SmtpClient发送网易163、126邮件使用sll协议失败的坑 | 码农家园 (codenong.com)
注意:下面的代码还需要配合云服务器安全策略、防火墙、安全中开放相应的587端口
- private bool SendMailTo(string mailTo,string verificationCode)
- {
- System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
- client.Host = "smtp.qq.com";
- client.UseDefaultCredentials = false;
- //授权密码是指开通POP3服务时服务商提供的授权密码,不是登陆邮箱的密码
- client.Credentials = new System.Net.NetworkCredential("443100019@qq.com", "授权密码");
- client.Port = 587;
- client.EnableSsl = false;
- client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
- //
- System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
- //发送邮箱
- message.From = new System.Net.Mail.MailAddress("443100019@qq.com");
- //收件箱,可以添加多个
- message.To.Add(mailTo);
- //邮件标题
- message.Subject = "【森之格】密码重置的验证码";
- //邮件正文
- message.Body = string.Format("此次重置的验证码为:{0},此验证码只能使用一次!验证码有效期为10分钟。", verificationCode);
- //邮件编码
- message.BodyEncoding = System.Text.Encoding.UTF8;
- //邮件正文是否HTML
- message.IsBodyHtml = true;
-
- try
- {
- //发送邮件
- client.Send(message);
- return true;
- }
- catch (Exception ex)
- {
- throw;
- }
- }
复制代码
|