Previous topicNext topic
Help > 开发指南 > 实用小功能 >
发送邮件

有时候我们需要使用代码发送邮件的需要,其实这很容易做到。不过在写代码之前,我们需要到我们的邮箱服务商的后台设置一下启动POP3服务。我们以163邮箱为例

在开启POP3服务时,邮箱服务商会提供一个“授权密码”,请一定要保管好这个密码,我们想通过代码发邮件就靠这个密码了,而不是我们日常登陆邮箱的密码。

Vb.Net
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

C#
System.Net.Mail.SmtpClient client = 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;
//
System.Net.Mail.MailMessage message = 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;
//添加附件
System.Net.Mail.Attachment data = 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 (Exception ex)
{
    MessageBox.Show("Send Email Failed." + ex.ToString());
}

因为像阿里云之类的云服务器是禁用常规SMTP服务器的邮件端口25的,所以上面的代码如果放在云服务器上可能会无法发送。这时候我们需要修改一下自己的代码。
相关参考资料:C# 服务器发送邮件失败实例分析 (51sjk.com)
记录一下C#使用SmtpClient发送网易163、126邮件使用sll协议失败的坑 | 码农家园 (codenong.com)

注意:下面的代码还需要配合云服务器安全策略、防火墙、安全中开放相应的587端口

C#
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;
    }
}