Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ASP.NET 实现发送邮件 + 多个收件人 + 多个附件

ASP.NET 实现发送邮件 + 多个收件人 + 多个附件

作者头像
DannyHoo
发布于 2018-09-13 03:36:13
发布于 2018-09-13 03:36:13
2K00
代码可运行
举报
文章被收录于专栏:Danny的专栏Danny的专栏
运行总次数:0
代码可运行

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1336934

       最近项目中需要实现发送邮件+添加附件的功能,于是又学习了一下System.Net.Mail.MailMessage和System.Net.Mail.SmtpClient等几个.Net中发邮件的几个类,根据网上的一些代码,做了一个小Demo分享一下。

界面效果

       老规矩,还是先看效果,以下为发送邮件的界面:

       发件人输入发送人的邮箱、密码;

       收件人栏目可输入多个收件人,多个收件人之间需要用英文状态下的分号“ ; ”来隔开(当然这只是一种方式,还可以根据需求设计输入联系人的方式,如从通讯录选择联系人等);

       主题、内容不再多说,附件可选择多个附件,这里只画了三个input控件,也可以根据需求增删控件或动态设置控件数量。

代码

       下面来看代码,根据代码整理思路:

        这是这个小Demo的解决方案结构:

        根目录建立了一个files文件夹,作为客户端发送邮件时在服务端的一个临时目录(这里如果不明白,请继续往下看)。

        界面代码:

        Default.aspx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SendEmail_Attachments.Default" %>
<!DOCTYPE html>
<html>
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <table align="center" border="0" cellpadding="0" cellspacing="0" width="776">
                <tr>
                    <td>
                        <table align="center" border="0" cellpadding="4" cellspacing="1" width="600" bgcolor="#cccccc">
                            <tr>
                                <td colspan="2" bgcolor="#f0f0f0" align="center">发送邮件+多收件人+多附件</td>
                            </tr>
                            <tr>
                                <td bgcolor="#f0f0f0" align="right" style="width: 73px">发送人:</td>
                                <td bgcolor="#ffffff" align="left">
                                    <asp:TextBox ID="fromMail" runat="server" Width="300" /></td>
                            </tr>
                            <tr>
                                <td bgcolor="#f0f0f0" align="right" style="width: 73px">密  码:</td>
                                <td bgcolor="#ffffff" align="left">
                                    <asp:TextBox ID="password" runat="server" Width="300" TextMode="Password"/></td>
                            </tr>
                            <tr>
                                <td bgcolor="#f0f0f0" align="right" style="width: 73px; height: 32px">收件人:</td>
                                <td bgcolor="#ffffff" align="left" style="height: 32px">
                                    <asp:TextBox ID="toMail" runat="server" TextMode="multiLine" Width="300px" Height="22"/><asp:Label ID="Label1" runat="server" Text="多个收件人请用分号隔开" ForeColor="Red"></asp:Label></td>
                            </tr>
                            <tr>
                                <td bgcolor="#f0f0f0" align="right" style="width: 73px">主    题:</td>
                                <td bgcolor="#ffffff" align="left">
                                    <asp:TextBox ID="subject" runat="server" Width="300" /></td>
                            </tr>
                            <tr>
                                <td bgcolor="#f0f0f0" align="center" style="width: 74px">附   件:</td>
                                <td bgcolor="#ffffff" align="left">
                                    <input type="file" id="upfile1" runat="server" style="width: 297px"/>
                                    <input type="file" id="upfile2" runat="server" style="width: 297px"/>
                                    <input type="file" id="upfile3" runat="server" style="width: 297px"/>
                                </td>
                            </tr>
                            <tr>
                                <td bgcolor="#f0f0f0" align="right" style="width: 73px">内    容:</td>
                                <td bgcolor="#ffffff" align="left">
                                    <asp:TextBox ID="body" TextMode="multiLine" runat="server" Width="500px" Height="200" /></td>
                            </tr>
                            <tr>
                                <td bgcolor="#f0f0f0" align="right" style="width: 73px">格    式:</td>
                                <td bgcolor="#ffffff" align="left">
                                    <asp:RadioButtonList ID="format" runat="server" /></td>
                            </tr>
                            <tr>
                                <td bgcolor="#f0f0f0" colspan="2" align="center">
                                    <asp:Button ID="send" runat="server" Text="发送" OnClick="send_Click" />
                                    <asp:Button ID="reset" runat="server" Text="重置" />
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </div>
    </form>
</body>
</html>

界面代码比较简单,这里不再多说。

       服务端代码:

       Default.aspx.cs

       注意引用相应的命名空间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;
using System.Text;
using System.Net;
using System.IO;

namespace SendEmail_Attachments
{
    public partial class Default : System.Web.UI.Page
    {
        //ASP.NET发送邮件带附件  http://blog.csdn.net/hope94/article/details/4364471
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                format.Items.Add(new ListItem("文本", "0"));
                format.Items.Add(new ListItem("HTML", "1"));
                format.Items[0].Selected = true;
            }
        }
        /// <summary>
        /// 发送邮件的点击事件
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="e"></param>
        protected void send_Click(object obj, EventArgs e)
        {
            bool flag = SendMail();
            if (flag == true)
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('发送成功!');</script>");
            }
            else
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('发送失败!');</script>");
            }
        }

        /// <summary>
        /// 发送邮件的执行过程
        /// </summary>
        /// <returns></returns>
        public bool SendMail()
        {
            //实例化MailMessage类,该类表示可以使用 SmtpClient 类发送的电子邮件
            //这里myEmail就表示将要发送的电子邮件实例
            MailMessage myEmail = new MailMessage();
            myEmail.From = new MailAddress(fromMail.Text.Trim());                   //电子邮件的发件人
            myEmail.Subject = subject.Text.Trim();                                  //电子邮件的主题
            myEmail.IsBodyHtml = format.SelectedItem.Value == "0" ? false : true;   //设置电子邮件正文格式是否为HTML格式

            //遍历收件人邮箱地址,并添加到此邮件的收件人里       
            if (toMail.Text.Trim().Length != 0)
            {
                string[] receivers = toMail.Text.Trim().Split(';');
                for (int i = 0; i < receivers.Length; i++)
                {
                    if (receivers[i].Length > 0)
                    {
                        myEmail.To.Add(receivers[i]);                               //为该电子邮件添加联系人
                    }
                }
            }

            //遍历从客户端接收到的附件,并依次添加到邮件的附件中
            HttpFileCollection uploadFilCol = Request.Files;
            for (int i = 0; i < uploadFilCol.Count; i++)
            {
                string ServerFileName = "";
                HttpPostedFile file = uploadFilCol[i];
                if (file.ContentLength != 0)
                {
                    try
                    {
                        string upFileName = file.FileName;
                        string[] strTemp = upFileName.Split('.');
                        string upFileExp = strTemp[strTemp.Length - 1].ToString();
                        string fileName = upFileName.Substring(upFileName.LastIndexOf("\\") + 1);
                        ServerFileName = Server.MapPath("/files") + "\\" + fileName;

                        file.SaveAs(ServerFileName);   //将此文件临时保存到服务端的files目录
                        myEmail.Attachments.Add(new Attachment(ServerFileName));  //为该电子邮件添加附件
                    }
                    catch (Exception ex)
                    {
                        Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert(" + ex.Message + ");</script>");
                        throw;
                    }
                }
            }

            myEmail.Body = body.Text.Trim();           //电子邮件的主体内容
            myEmail.BodyEncoding = Encoding.UTF8;      //电子邮件主体内容的编码方式
            myEmail.Priority = MailPriority.High;      //设置此电子邮件的优先级

            //实例化SmtpClient类,该类用于将电子邮件发送到 SMTP 服务器以便传递
            SmtpClient smtp = new SmtpClient();
            smtp.Credentials = new NetworkCredential(fromMail.Text.Trim(), password.Text.Trim());   //设置用于验证发件人身份的凭据
            smtp.Port = 25;                           //设置用于 SMTP 事务的端口

            //根据发件人的电子邮件地址判断发件服务器地址
            if (fromMail.Text.Trim().Length != 0)
            {
                string[] addressor = fromMail.Text.Trim().Split(new Char[] { '@', '.' });
                switch (addressor[1])
                {
                    case "163":
                        smtp.Host = "smtp.163.com";
                        break;
                    case "gmail":
                        smtp.Host = "smtp.gmail.com";
                        break;
                    case "hotmail":
                        smtp.Host = "smtp-mail.outlook.com";
                        break;
                    case "qq":
                        smtp.Host = "smtp.qq.com";
                        break;
                    case "foxmail":
                        smtp.Host = "smtp.qq.com";
                        break;
                    case "sina":
                        smtp.Host = "smtp.sina.com.cn";
                        break;            
                }
            }
            smtp.EnableSsl = true;                    //指定 SmtpClient 是否使用安全套接字层(SSL)加密连接
                               
            try
            {
                smtp.Send(myEmail);                   //发送该邮件
                myEmail.Dispose();                    //关闭邮件使用的所有进程
                DeleteFiles();                        //删除临时目录files中刚刚上传的所有附件
            }
            catch (Exception e)
            {
                DeleteFiles();                        //删除临时目录files中刚刚上传的所有附件
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('发送失败,请检查您的邮箱账号和密码是否填写正确!');</script>"); ;
            }
            return true;
        }

        /// <summary>
        /// 遍历删除files文件夹内所有刚刚上传的附件
        /// </summary>
        protected void DeleteFiles()
        {
            DirectoryInfo files = new DirectoryInfo(Server.MapPath("/files"));
            foreach (System.IO.FileInfo f in files.GetFiles("*.*"))
            {
                f.Delete();
            }
        }
    }
}

       这里主要用到两个类,System.Net.Mail.MailMessage(http://msdn.microsoft.com/zh-cn/library/system.net.mail.mailmessage(v=vs.80%29.aspx)和[System.Net.Mail.SmtpClient](http://msdn.microsoft.com/zh-cn/library/system.net.mail.smtpclient(v=vs.80%29.aspx),简单来说,MailMessage就是我们要发的邮件,SmtpClient的功能是在一定条件下把该邮件发送出去。

System.Net.Mail.MailMessage类

       在MSDN上可以查到,MailMessage的属性如下:

       其中收件人To属性、抄送CC、密送BCC和附件Attachments都可以为多个值,所以在上面代码中,在发送函数SendEmail()中才可以为邮件添加多个收件人和多个附件,这里没有添加密送和抄送的功能,但道理一样。

System.Net.Mail.SmtpClient类

       SmtpClient的属性有:

       方法有:

        根据这些属性和方法,您肯定能够理解代码中SmtpClient是如何将电子邮件发送出去了,这里说明几点注意事项: 

         SmtpClient的Host属性,发送不同类型的电子邮件使用的服务器是不同的,因此Host属性也是不同的,如果您有多个种类的邮箱,那么可以看一下您每个邮箱的发件服务器的地址是不是不同的,比如:

        163邮箱的发件服务器地址为:smtp.163.com

        谷歌邮箱的发件服务器地址为:smtp.gmail.com

        Hotmail邮箱的发件服务器地址为:smtp-mail.outlook.com

        Foxmail和QQ邮箱的发件服务器地址为:smtp.qq.com

        所以在代码中,加了一个Switch来根据发件人邮箱类型来设置发件服务器地址~∪~

        最后邮件发送成功或者失败时,都需要调用一下DeleteFiles()函数,来删除刚刚上传到服务器上的临时文件(附件),说一下为什么要增加这个files文件夹,因为这个例子在一台电脑上做测试完全不必加这个文件夹,直接把本地文件作为附件添加到MailMessage的实例就行,但因为为MailMessage添加附件这句代码myEmail.Attachments.Add(new Attachment(ServerFileName)); 是运行在服务端的,因此如果程序发布,在异地执行操作时就不可行了,所以需要先把附件上传到服务端(这里就在服务端添加了files文件夹用来存放临时文件),再为MailMessage添加该附件,最后清理上传到客户端的附件。

        暂时先做成这样,后面有需求时再进行优化。

        原创不易,最后附上参考文章:

http://blog.csdn.net/hope94/article/details/4364471

        本例是在此文基础上修改而来

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014年12月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JMail 邮件发送实例教程
   网上我见到过很多的关于jmail发信的教程,可是每一篇讲的几乎都只是原理,对于没有用过 jmail 的 ASP 用户要调试成功还是很需要下一番苦工,我就是被理论蒙蔽了的受害者,不过经过反复琢磨还是调试成功了,以下我把他单独作成了示例大家只要按要求复制代码另存后就能看到效果了,代码旁边有注释,结合理论教程我想应该没问题了!
Savalone
2020/02/11
1.5K0
java开发_STMP邮箱客户端_发送邮件
http://zhiwenweb.cn/jszx/czxt/201009/20179.html
Hongten
2018/09/13
2.4K0
实用代码|javaMail发送邮件(文末重磅资源!)
重磅好消息:小编考虑到同学们对学习资源的迫切需求,近期将整理出学习视频库和电子书库,你想要的资源全在这里,该资源永久有效,不断更新,敬请期待!
KEN DO EVERTHING
2019/01/17
8271
C#通过邮箱验证来找回密码
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
1.6K0
【Python实用工具】巧妙利用Python实现发送带附件的邮件
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
天道Vax的时间宝藏
2021/08/11
2.4K0
C#进阶-实现邮箱收发功能
在C#中,发送邮件是一项常见的任务,通常用于实现自动化通知、报警和与用户进行交互等场景。C#提供了多种发送邮件的方式,主要方式包括SMTP协议、POP3协议、IMAP协议、Exchange服务器等。使用这些方式,开发人员可以灵活地发送和接收邮件,满足各种应用场景的需求。
Damon小智
2024/03/20
3150
C#进阶-实现邮箱收发功能
java 发送邮件 带附件或者表格
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146672.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/28
1.1K0
java 发送邮件 带附件或者表格
关于.NET邮件的收发问题总结
        最近因为项目需要,研究了一下邮件的发送和接收,发现现在这方面的问题很多.虽然网上这方面的资料很多,但是真正应用起来 仍然会发现不少问题,而且很多人都抱怨书上或者网上的一些代码应用起来是失败的,并且针对附件方面的处理不太完善,针对这种情况我把最近研究所得做一个小小的总结,希望能对大家有所帮助。         首先来谈谈发送邮件的问题。
跟着阿笨一起玩NET
2018/09/19
7770
【Email】Java发送邮件接口与配置类
可能最近写博客时间不会很多,最近又在搞一个项目了。 发送邮件的类,我以前写过,不过写的不是接口封装的,现在自己项目用到了,就重新写了一下,现在把它分享出来给大家。
谙忆
2021/01/21
6670
【Email】Java发送邮件接口与配置类
发送邮件程序(Csharp2005)
我觉得懂得编写发送邮件客服端丰常重要.这可以把它嵌入到你的软件里加强与用户的沟通与可以收集程运行的错误信息.以与我编写一小的发送邮件客服端来与在家交流. 程序如下:
Java架构师必看
2021/03/22
5910
发送邮件程序(Csharp2005)
ASP.NET(C#) 发送邮件帮助类Mailhelper
using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; u
KenTalk
2018/09/11
1.3K0
MYSQL自动备份并发送邮件工具
最近在开发小程序,由于服务器只有一台,所以不能数据库异机备份,出于数据安全的考虑,就做了一个数据库定时备份并发送邮件到自己的邮箱的小工具,先看下工具界面
code2roc
2023/07/19
2960
MYSQL自动备份并发送邮件工具
走进Java接口测试之使用JavaMailSender发送邮件
一般我们在做接口自动化时,都会通过钉钉或者邮件的方式通知测试结果信息。而且基本上邮件的内容都是测试报告。所以,今天就来讲讲如何利用 pring提供的 JavaMailSender接口,实现邮件发送功能。
高楼Zee
2019/07/17
2.2K0
走进Java接口测试之使用JavaMailSender发送邮件
ASP和ASP.NET发送邮件笔记
    这两天因公司网站邮件发不出去,然后研究了在asp网站发送邮件和在asp.net网站发送邮件的代码,把碰到的问题这里记录一下。
tandaxia
2018/09/27
7.4K0
ASP和ASP.NET发送邮件笔记
邮件发送类,支持HTML格式,支持优先级设置
本文由来源 22,由 javajgs_com 整理编辑,其版权均为 22 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。
Java架构师必看
2021/03/22
1.7K0
使用 Java 发送邮件
在我们的应用程序中有时需要给用户发送邮件,例如激活邮件、通知邮件等等。那么如何使用 Java 来给用户发送邮件呢?
宋先生
2019/07/18
2.4K0
VB.NET 发送QQ邮件,可用于发送验证码和批量文件,通知信息
首先打开邮箱的POP3/IMAP/SMTP,获取邮箱授权码,具体操作如下:
办公魔盒
2019/08/28
1.6K0
VB.NET 发送QQ邮件,可用于发送验证码和批量文件,通知信息
c#发送邮件含附件
在网上巴拉巴拉找个的,然后修改了下,测试可用 using System; using System.Collections.Generic; using System.Text; using System.Net.Mail; using System.Net.Mime; using System.Net; namespace CustomerDetails { public class SendEmail { private MailMessage mailMessage;
冰封一夏
2019/09/10
1.1K0
python之SMTP发送邮件
假设我们自己的邮件地址是myemail@163.com,对方的邮件地址是friend@qq.com,我们在网易提供的163邮箱界面编写邮件,然后发送给对方。那么,这封邮件是怎么从我方发送到对方的呢?
菲宇
2019/06/13
1.3K0
ASP.Net 2.0 发送邮件的代码
这两天因为要做一个可以收集用户提交信息,然后发送邮件到指定邮箱的网页。在asp.net2.0里网络
Java架构师必看
2021/03/22
1.9K0
相关推荐
JMail 邮件发送实例教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验