zoukankan      html  css  js  c++  java
  • 发送邮件的几种方法(C#发邮件 和 js前台实现都有)C#后台自动发邮件 js发邮件

    1.后台自动发邮件

    1)首先设置邮件参数,这里写在configuration里面

      <appSettings>
        <add key="SMTP" value="smtp.office365.com" />
        <add key="Port" value="587" />
        <add key="username" value="xxx@microsoft.com" />
        <add key="password" value="#EDC4rfv" />
        <add key="SmtpDeliveryMethod" value="Network" />
        <add key="EnableSsl" value="true" />
        <add key="IsBodyHtml" value="false" />
      </appSettings>

    示例使用的是微软邮箱,其他邮件参数可以自行百度

    2)在后台代码中添加如下语句

     try
                {
                    string date = DateTime.Now.ToString("R").Split(',')[1];
                    date = date.Split(' ')[1] + '-' + date.Split(' ')[2] + '-' + date.Split(' ')[3];
    
                    string mailto = "xxx@microsoft.com";
    
                    MailMessage mail = new MailMessage();
    
                    mail.From = new MailAddress(ConfigurationManager.AppSettings["username"]);//
                    mail.To.Add(mailto);
                    mail.Subject = "Subject   " + DateTime.Now.ToLongDateString().ToString(); ;
                    mail.Body = "Test Email";
                    mail.IsBodyHtml = bool.Parse(ConfigurationManager.AppSettings["IsBodyHtml"]);//mail body是否为html
                    string username = ConfigurationManager.AppSettings["username"];//
                    string password = ConfigurationManager.AppSettings["password"];//
    
                    using (SmtpClient SmtpServer = new SmtpClient(ConfigurationManager.AppSettings["SMTP"]))//
                    {
                        SmtpServer.Port = int.Parse(ConfigurationManager.AppSettings["Port"]);//
                        SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
                        SmtpServer.Credentials = new System.Net.NetworkCredential(username, password);
                        SmtpServer.EnableSsl = bool.Parse(ConfigurationManager.AppSettings["EnableSsl"]);//
                        SmtpServer.Send(mail);
                    }
    
                }
                catch (Exception ex)
                {
                    Console.Write("Send Fail");
                    Console.Write(ex.Message);
                }

    这里需要引用 System.Configuration;(第一步中在config里面设置的参数读取)和System.Net.Mail;

    程序运行后会直接发送邮件到mailto不需要本地安装outlook

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    2.调用本地outlook打开邮件并注入邮件内容(在发布到服务器上之后并不怎么好用,微软好像并不支持将outlook在无人监控的服务器上automation的做法)

    在NuGet 包中安装 Microsoft.Office.Interop.Outlook      using Outlook = Microsoft.Office.Interop.Outlook;

    Outlook.Application olApp = new Outlook.Application();
                Outlook.MailItem mailItem = (Outlook.MailItem)olApp.CreateItem(Outlook.OlItemType.olMailItem);
                //set email to , email Subject , email CC 
                mailItem.To = "xxx@microsoft.com";
                // mailItem.CC = "";
                mailItem.Subject = "C#_SendEmail_Test";
                mailItem.Attachments.Add(@"D:C#_LearnTest.txt");//附件
                //set the body
                mailItem.BodyFormat = Outlook.OlBodyFormat.olFormatRichText;
                string content = @"<html></html>";
    
                mailItem.HTMLBody = content;//这里发送的是html,其余格式也可以
                //mailItem.Display(mailItem);//不直接发送将这行取消注释
                //((Outlook._MailItem)mailItem).Send();//直接发送将这行取消注释

    不直接发送 outlook会弹出一个邮件以供编辑 手动发送 如下图

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    3.使用js调用本地的outlook没有深入研究,只知道可以打开并注入内容 不知道可不可以直接发送,以下是使用js打开outlook并注入内容的方法(参考http://www.cnblogs.com/LiveWithIt/p/5937049.html)

    <a href="mailto:xxx@xxx.com?subject=Subject&cc=CC&body=Body">send mail</a>

    在第一个参数(mailto)后面添加?,其他参数之间用&连接。

    mailto支持以下几种参数:

    局部效果图如下所示:

    根据参考链接提供一个示例:

    html:

    <ul class="email">
        <li><input type="text" name="name" placeholder="Name"></li>
        <li><input type="text" name="email" placeholder="Email Address"></li>
        <li><input type="text" name="number" placeholder="Phone Number"></li>
        <li class="message"><textarea name="message" placeholder="Message"></textarea> </li>
        <button class="btn btn-define" onclick="sendEmail()">Submit</button>
        <a href="mailto" id="send"></a>
    </ul>

    js:

        function sendEmail(){
            var name=$("[name='name']").val(),
             email=$("[name='email']").val(),
             number=$("[name='number']").val(),
             message=$("[name='message']").val(),
             body="My Name is: "+name+"%0a%0d"
              +"My Email Address is: "+email+"%0a%0d"
              +"My Phone Number is: "+number+"%0a%0d"
              +"Message:"+"%0a%0d"+message;
            $("#send").attr("href","mailto:mamengyi1121@163.com?body="+body);
            document.getElementById("send").click();
        }

    使用js来填充emailbody 是否可以兼容html格式在这里不讨论,但是经过本人测试在我的电脑上不可以,%0a%0d是UTL编码用来实现换行 取代<br />

    效果图如下:

    (听说nodejs可以实现)先去研究 后续再写

    MrNou
  • 相关阅读:
    几个关于集合的有趣证明
    SICP 作业2.5
    有关集合大小的比较
    2020 ICPC 小米邀请赛 部分题解
    Hello World!
    【图论】BellmanFord算法
    【图论】格子图
    【图论】BFS
    【图论】二分图最大匹配 | 二分图最大独立集 | 二分图最小点覆盖
    【图论】最大权不相交区间
  • 原文地址:https://www.cnblogs.com/yangsirc/p/8038866.html
Copyright © 2011-2022 走看看