zoukankan      html  css  js  c++  java
  • C#使用SmtpClient发送邮件

     

    目的:写一个可发送邮件的DLL。

    原理: 

      例如A使用163邮箱发送邮件给B(qq邮箱)。首先A会把邮件通过SMTP(Simple Mail Transfer Protocol)协议传输到163的Smtp服务器上,163的Smtp服务器会根据B的邮箱账号,把邮件通过Smtp协议发给QQ邮箱的Smtp服务器。QQ的Smtp服务器接收到邮件消息后会将之存储在QQ邮箱的邮件存储设备上。当B登陆QQ邮箱后,如果有新邮件,POP3服务器就会从QQ邮箱的邮件存储设备上读出邮件并通过POP3/IMAP服务发送给邮件客户端的B。

      原理图

      

     

    使用的对象
          smtpClient类:允许应用程序使用简单邮件传输协议 (SMTP) 发送电子邮件。

          MailAddress类:MailAddress类表示电子邮件的地址。该类结合SmtpClient类或MailMessage类使用,其实例存储了电子邮件的地址信息。  

          MailMessage 类:MailMessage类是.NET Framework中管理邮件的专用类,表示可以使用SmtpClient类发送的电子邮件。MailMessage 类的实例表示一个电子邮件的所有内容,并用SmtpClient类来传输到SMTP服务器。若要指定电子邮件的发件人、收件人和内容,可以使用 MailMessage类的关联属性。 

          NetworkCredential类:为基于密码的身份验证方案(如基本、简要、NTLM 和 Kerberos 身份验证)提供凭据。

     

    代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Mail;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                sendingMail();
                Console.ReadLine();
            }
            public static string sendingMail()
            {
                string smtpService = "smtp.qq.com";
                string sendEmail = "xxx@qq.com";
                string sendpwd = "*******";
    
    
                //确定smtp服务器地址 实例化一个Smtp客户端
                SmtpClient smtpclient = new SmtpClient();
                smtpclient.Host = smtpService;
                //smtpClient.Port = "";//qq邮箱可以不用端口
    
                //确定发件地址与收件地址
                MailAddress sendAddress = new MailAddress(sendEmail);
                MailAddress receiveAddress = new MailAddress("XXXXXX@qq.com");
    
                //构造一个Email的Message对象 内容信息
                MailMessage mailMessage = new MailMessage(sendAddress, receiveAddress);
                mailMessage.Subject = "测试邮件" + DateTime.Now;
                mailMessage.SubjectEncoding = System.Text.Encoding.UTF8;
                mailMessage.Body = "测试邮件发送成功!!!";
                mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
    
                //邮件发送方式  通过网络发送到smtp服务器
                smtpclient.DeliveryMethod = SmtpDeliveryMethod.Network;
    
                //如果服务器支持安全连接,则将安全连接设为true
                smtpclient.EnableSsl = true;
                try
                {
                    //是否使用默认凭据,若为false,则使用自定义的证书,就是下面的networkCredential实例对象
                    smtpclient.UseDefaultCredentials = false;
    
                    //指定邮箱账号和密码,需要注意的是,这个密码是你在QQ邮箱设置里开启服务的时候给你的那个授权码
                    NetworkCredential networkCredential = new NetworkCredential(sendEmail, sendpwd);
                    smtpclient.Credentials = networkCredential;
    
                    //发送邮件
                    smtpclient.Send(mailMessage);
                    Console.WriteLine("发送邮件成功");
    
                }
                catch (System.Net.Mail.SmtpException ex) { Console.WriteLine(ex.Message, "发送邮件出错"); }
                return "DLL调用成功!";
            }
        }
    }

    遇到的问题

          1.报错:

             解决办法:将安全连接设为true,如:smtpclient.EnableSsl = true;

          2.报错:mail from address must be same as authorization user

           解决办法:QQ邮箱设置里开启服务。如图:

           

    最后测试该方法成功,结果如图:

     

     

    更多详尽的资料可参考这个地址:http://blog.csdn.net/liyanwwww/article/details/5507498

  • 相关阅读:
    DIY 作品 及 维修 不定时更新
    置顶,博客中所有源码 github
    openwrt PandoraBox PBR-M1 极路由4 HC5962 更新固件
    使用 squid 共享 虚拟专用网至局域网
    第一次参加日语能力测试 N5
    libx264 libfdk_aac 编码 解码 详解
    开发RTSP 直播软件 H264 AAC 编码 live555 ffmpeg
    MFC Camera 摄像头预览 拍照
    http2 技术整理 nginx 搭建 http2 wireshark 抓包分析 server push 服务端推送
    plist 图集 php 批量提取 PS 一个个切
  • 原文地址:https://www.cnblogs.com/AaronBear/p/8549648.html
Copyright © 2011-2022 走看看