zoukankan      html  css  js  c++  java
  • C# 两种方式发送邮件 MailTo + SMTP

    通过mailto标签和SMTP协议两种方式发送邮件

    using System;
    using System.Collections.Generic;
    using System.Net.Mail;
    using System.Text;
    
    namespace WUtility.ToolHelper
    {
        public class EmailHelper
        {
            //格式:mailto:发件人地址
            //格式:mailto:发件人地址?subject=邮件主题
            //格式:mailto:发件人地址?cc=抄送地址&subject=邮件主题
            //格式:mailto:发件人地址?bcc=密送地址
            //格式:mailto:发件人地址?body=邮件内容
            //格式:mailto:发件人地址1,发件地址2,发件地址3(以逗号分隔)   [以逗号分隔可能邮箱不识别(稍等一会,或者在邮箱中点击下),可以分号分隔]
            //格式:mailto:发件人地址1,发件人地址2?cc=抄送地址&bcc=密送地址&subject=主题&body=邮件内容
    
            //body中%0a%0d用于换行(只用一个就可以)
            //e.x.  ******%0a%0d******
            //输出:******
            //      ******
    
            /// <summary>
            /// 调用默认工具发送Email
            /// </summary>
            /// <param name="sendTo">接收人,可多个以逗号分隔</param>
            /// <param name="cc">抄送人</param>
            /// <param name="bcc">密送地址</param>
            /// <param name="subject">主题</param>
            /// <param name="body">内容</param>
            public static void DefaultSendMailTo(string sendTo = " ", string cc = " ", string bcc = " ", string subject = " ", string body = " ")
            {
                string message = string.Format("mailto:{0}?cc={1}&bcc={2}&subject={3}&body={4}", sendTo ?? " ", cc ?? " ", bcc ?? " ", subject ?? " ", body ?? " ");
                System.Diagnostics.Process.Start(message);//调用进程启动邮件
            }
    
            /// <summary>
            /// 发送邮件
            /// </summary>
            /// <param name="userEmailAddress">发件人地址</param>
            /// <param name="userName">发件人姓名(可为空)</param>
            /// <param name="password">密码</param>
            /// <param name="host">邮件服务器地址</param>
            /// <param name="port"></param>
            /// <param name="sendToList">收件人(多个电子邮件地址之间必须用逗号字符(“,”)分隔)</param>
            /// <param name="sendCCList">抄送人(多个电子邮件地址之间必须用逗号字符(“,”)分隔)</param>
            /// <param name="subject">主题</param>
            /// <param name="body">内容</param>
            /// <param name="attachmentsPath">附件路径</param>
            /// <param name="errorMessage">错误信息</param>
            public static bool SendMessage(string userEmailAddress, string userName, string password, string host, int port,
                string[] sendToList, string[] sendCCList, string subject, string body, string[] attachmentsPath, out string errorMessage)
            {
                errorMessage = string.Empty;
                SmtpClient client = new SmtpClient();
    
                //注意:一定要先设置 EnableSsl和UseDefaultCredentials,再实例化Credentials 
                client.EnableSsl = false;
                client.UseDefaultCredentials = true;
    
                client.Credentials = new System.Net.NetworkCredential(userEmailAddress, password);//用户名、密码
                client.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
                client.Host = host;//邮件服务器
                client.Port = port;//端口号 非SSL方式,默认端口号为:25
    
                MailMessage msg = new MailMessage();
    
                //加发件人
                foreach (string send in sendToList)
                {
                    msg.To.Add(send);
                }
                //加抄送
                if (sendCCList != null)
                {
                    foreach (string cc in sendCCList)
                    {
                        msg.To.Add(cc);
                    }
                }
    
                //在有附件的情况下添加附件
                if (attachmentsPath != null && attachmentsPath.Length > 0)
                {
                    foreach (string path in attachmentsPath)
                    {
                        var attachFile = new Attachment(path);
                        msg.Attachments.Add(attachFile);
                    }
                }
                msg.From = new MailAddress(userEmailAddress, userName);//发件人地址
                msg.Subject = subject;//邮件标题
                msg.Body = body;//邮件内容
                msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
                msg.IsBodyHtml = true;//是否是HTML邮件
                msg.Priority = MailPriority.High;//邮件优先级
    
                try
                {
                    client.Send(msg);
                    return true;
                }
                catch (System.Net.Mail.SmtpException ex)
                {
                    errorMessage = ex.Message;
                    return false;
                }
            }
    
        }
    }

    使用示例:

            private void button16_Click(object sender, EventArgs e)
            {
                string szSendTo = "1234@qq.com;12345@qq.com";
                string szCC = "123456@163.com;1234567@qq.com";
                string szBcc = "12345678@qq.com";
                string szSubject = "测试主题";
                string body = "******今天天气不错哦,%0a%0d";
                body += "据说明天天气也不错哦";
                EmailHelper.DefaultSendMailTo(szSendTo, szCC, szBcc, szSubject, body);
            }
    
            private void button17_Click(object sender, EventArgs e)
            {
                var msg = "content";
                string errorMsg;
                EmailHelper.SendMessage("aisa@qq.com", "aisa@qq.com", "123456", "smtp.qq.com", 25,
                    new[] { "123456@qq.com" }, null, "测试Subject", msg, null, out errorMsg);
            }
  • 相关阅读:
    changing a pointer rather than erasing memory cells
    验证码识别 edge enhancement 轮廓增强 region finding 区域查找
    Manipulating Data Structures
    passing parameters by value is inefficient when the parameters represent large blocks of data
    Aliasing 走样
    Artificial Intelligence Research Methodologies 人工智能研究方法
    Thread safety
    include pointers as a primitive data type
    flat file
    functional cohesion
  • 原文地址:https://www.cnblogs.com/aisa-thanatos/p/10974107.html
Copyright © 2011-2022 走看看