zoukankan      html  css  js  c++  java
  • 【发送邮件】通过阿里云服务器发送邮件

    写在最前面:

           由于绝大部分云服务器提供商把25端口屏蔽了,所以想要通过25端口在服务器发送邮件基本不成功

           

    一、通过阿里云邮件api发送

    api发送之前写过一篇介绍:https://www.cnblogs.com/yhnet/p/14439984.html

    二、通过SMTP方式发送

    1、80端口发送(带附件发送)

    #region 通过SMTP发送带附件的邮件(阿里提供的80端口方法可发送)
            /// <summary>
            /// 通过SMTP发送带附件的邮件(阿里提供的80端口方法可发送)
            /// </summary>
            /// <param name="to_mail">收件地址</param>
            /// <param name="from_mail">发件地址</param>
            /// <param name="subject">标题</param>
            /// <param name="name">昵称(可以传入姓名)</param>
            /// <param name="body">内容</param>
            /// <param name="smtp_server">smtp服务器地址</param>
            /// <param name="smtp_password">smtp的密码</param>
            /// <param name="file_address">文件的绝对路径</param>
            /// <returns></returns>
            public static bool SendEmailWithFile(string to_mail, string name, string from_mail, string subject, string body, string smtp_server, string smtp_password, string file_address)
            {
                try
                {
                    MailMessage mailMsg = new MailMessage();
                    mailMsg.To.Add(new MailAddress(to_mail));
                    mailMsg.From = new MailAddress(from_mail, name);
                    //可选,设置回信地址 
                    //mailMsg.ReplyTo.Add("***");
                    // 邮件主题
                    mailMsg.Subject = subject;
                    // 邮件正文内容
                    //string text = body; // "欢迎使用阿里云邮件推送";
                    //mailMsg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(text, null, MediaTypeNames.Text.Plain));
    
                    string html = body;
                    mailMsg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html));
    
                    // 添加附件
                    string file = file_address; // "D:\1.txt";
                    Attachment data = new Attachment(file, MediaTypeNames.Application.Octet);
                    mailMsg.Attachments.Add(data);
                    //邮件推送的SMTP地址和端口
                    //SmtpClient smtpClient = new SmtpClient("smtpdm.aliyun.com", 25);
                    //C#官方文档介绍说明不支持隐式TLS方式,即465端口,需要使用25或者80端口(ECS不支持25端口),另外需增加一行 smtpClient.EnableSsl = true; 故使用SMTP加密方式需要修改如下:
                    SmtpClient smtpClient = new SmtpClient(smtp_server, 80);
                    smtpClient.EnableSsl = true;
                    // 使用SMTP用户名和密码进行验证
                    System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(from_mail, smtp_password);
                    smtpClient.Credentials = credentials;
                    smtpClient.Send(mailMsg);
                    return true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                    return false;
                }
            }
            #endregion
    View Code

    2、465端口发送(带附件发送)

    #region 通过Web.Mail.MailMessage SMTP发送带附件的邮件V2 465端口
            /// <summary>
            /// 通过SMTP发送带附件的邮件2 465端口
            /// </summary>
            /// <param name="toMail">收件人地址</param>
            /// <param name="fromMail">发件人地址</param>
            /// <param name="subject">标题</param>
            /// <param name="body">内容</param>
            /// <param name="smtp_server">smtp服务器地址</param>
            /// <param name="smtp_password">smtp授权密码</param>
            /// <param name="file_address">文件绝对路径</param>
            /// <returns></returns>
            public static bool SendEmailWithFile_V2(string toMail, string fromMail, string subject, string body, string smtp_server, string smtp_password, string file_address)
            {
                System.Web.Mail.MailMessage mail = new System.Web.Mail.MailMessage();
                try
                {
                    mail.To = toMail;
                    mail.From = fromMail;
                    mail.Subject = subject;
                    mail.BodyFormat = System.Web.Mail.MailFormat.Html;
                    mail.Body = body;
    
                    mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); //身份验证
                    mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", mail.From); //邮箱登录账号,这里跟前面的发送账号一样就行
                    mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", smtp_password); //这个密码要注意:如果是一般账号,要用授权码;企业账号用登录密码
                    mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 465);//端口
                    mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");//SSL加密
                    string file = file_address; // "D:\1.txt";
                    System.Web.Mail.MailAttachment oAttch = new System.Web.Mail.MailAttachment(file, System.Web.Mail.MailEncoding.Base64);
                    mail.Attachments.Add(oAttch);
                    System.Web.Mail.SmtpMail.SmtpServer = smtp_server;    //企业账号用smtp.exmail.qq.com
                    System.Web.Mail.SmtpMail.Send(mail);
    
                    return true;
                }
                catch (Exception ex)
                {
                    //失败,错误信息:ex.Message;
                    Console.WriteLine(ex.Message);
                    return false;
                }
            }
            #endregion
    View Code

    PS:80端口发送是阿里云邮件发送帮助文档里介绍的方法,465端口是在网友总结的方法基础上增加了附件

    参考自:https://www.bbsmax.com/A/kjdw0m92zN/

  • 相关阅读:
    javaweb学习总结(三十三)——使用JDBC对数据库进行CRUD
    javaweb学习总结(三十二)——JDBC学习入门
    javaweb学习总结(三十一)——国际化(i18n)
    javaweb学习总结(三十)——EL函数库
    javaweb学习总结(二十九)——EL表达式
    javaweb学习总结(二十八)——JSTL标签库之核心标签
    javaweb学习总结(二十七)——jsp简单标签开发案例和打包
    JSP页面中使用JSTL标签出现无法解析问题解决办法
    MySQL客户端输出窗口显示中文乱码问题解决办法
    windows操作系统查看占用端口的进程
  • 原文地址:https://www.cnblogs.com/yhnet/p/14817853.html
Copyright © 2011-2022 走看看