asp.net MVC+API如何实现发送邮箱以及附件

选择要发送的用户,填写右边的邮箱信息和附件

前端代码

html块

<div class="layui-col-md5">
            <form class="layui-form" action="">
                <div class="layui-form-item">
                    <label class="layui-form-label">邮件标题</label>
                    <div class="layui-input-block">
                        <input type="text" name="title" required lay-verify="required" placeholder="请输入标题" autocomplete="off" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">邮件正文</label>
                    <div class="layui-input-block">
                        <textarea name="content" placeholder="请输入内容" class="layui-textarea"></textarea>
                    </div>
                    @*<div class="layui-form-mid layui-word-aux">辅助文字</div>*@
                </div>
                <div class="layui-form-item">
                    <div class="layui-inline">
                        <label class="layui-form-label">邮件附件</label>
                        <div class="layui-input-block">
                            <label style="color:red">上传的文件不能超过20M</label>
                            <input type="file" id="files" name="files" multiple="multiple" hidden />
                            <input type="text" class="layui-input" readonly id="select" placeholder="点击选择文件" />
                        </div>
                    </div>
                </div>
                <div class="layui-form-item" style="float: right;">
                    <div class="layui-inline">
                        <div class="layui-input-block">
                            <button type="button" class="layui-btn" onclick="SendEmail()">发送</button>
                        </div>
                    </div>
                    </div>
            </form>
            
        </div>

 我这里用的是layui的框架

js块

点击发送按钮事件

//发送邮箱
    function SendEmail() {
        layui.use('table', function () {
            var table = layui.table;
            var orders = new Array();
            var checkStatus = table.checkStatus('OrgList');
            if (checkStatus.data.length == 0) {
                layer.msg("请选择一条数据!");
                return false;
            }
            var EmailData = {}
            EmailData.fwbt = $("input[name=title]").val();
            EmailData.fwnr = $("textarea[name=content]").val();
            EmailData.emaillist=[]
            for (var i = 0; i < checkStatus.data.length; i++) {
                datalist.khname.push(checkStatus.data[i].name);
                datalist.khid.push(checkStatus.data[i].id);
                EmailData.emaillist.push(checkStatus.data[i].email)
            }
            datalist.fwbt = $("input[name=title]").val();
            datalist.fwnr = $("textarea[name=content]").val();
            var obj = document.getElementById("files");
            var fl = obj.files.length;
            var obj = document.getElementById("files");
            var fl = obj.files.length;
            if (fl > 0) {
                var datas2 = new FormData();
                for (var i = 0; i < fl; i++) {
                    var files = obj.files[i];
                    datas2.append("files", files);
                }
            }
            $axfile("/api/YWGL/Fictitious?EmailData=" + JSON.stringify(EmailData), datas2, true, "POST", "json", header, function (data) {
                
            })

        });

    }

 EmailData是里面分别是邮箱标题、邮箱内容、还有选择的客户的邮箱,datas2是选择的附件信息

后端API

首先要在Web.config里面加入以下代码,用于保存获取发送人的的邮箱信息

<!--邮箱配置-->
  <system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="(发送人的QQ号)@qq.com">
        <network host="mail.sohu.com" userName="(发送人的QQ号)@qq.com" password="(发送人的QQ密码)" />
      </smtp>
    </mailSettings>
  </system.net>

 接口代码

扫描二维码关注公众号,回复: 14804760 查看本文章
/// <summary>
        /// 发送邮箱
        /// </summary> 
        [HttpPost]
        public Response Fictitious(string EmailData)
        {
            JObject filter = JObject.Parse(EmailData);

            MailMessage msg = new MailMessage();
            SmtpSection cfg = NetSectionGroup.GetSectionGroup
                            (WebConfigurationManager.OpenWebConfiguration("~/web.config")).MailSettings.Smtp;//获取配置文件里面发送人的邮箱信息
            var Scheme = System.Web.HttpContext.Current.Request.Url.Scheme;
            var port = System.Web.HttpContext.Current.Request.Url.Port;
            var Host = System.Web.HttpContext.Current.Request.Url.Host.ToString();
            //string emailcontent = "";
            string emailcontent = $"标题:{filter["fwbt"].ToString()}\n正文:{filter["fwnr"].ToString()}\n";//邮件内容
            //邮件附件
            HttpRequest request = HttpContext.Current.Request;
            if (request.ContentLength > 20 * 1024 * 1024)
            {
                return new Response
                {
                    Result = 2
                };
            }
            HttpPostedFile postedFile = null;
            int sl = HttpContext.Current.Request.Files.Count;
            for (int i = 0; i < sl; i++)
            {
                postedFile = HttpContext.Current.Request.Files[i];

                string rootDictory = AppDomain.CurrentDomain.BaseDirectory;
                string filePath = "Files\\ywgl_khfwfj\\";
                
                rootDictory += filePath;
                if (!Directory.Exists(rootDictory))
                {
                    Directory.CreateDirectory(rootDictory);
                }

                string filename = Path.GetFileName(postedFile.FileName);

                string fileExtension = Path.GetExtension(postedFile.FileName);//文件后缀

                string gid = Guid.NewGuid().ToString().Replace("-", "");

                string sFileName = rootDictory + gid + fileExtension; //文件地址 + 文件名

                postedFile.SaveAs(sFileName);//保存附件到本地
                //添加附件
                Attachment data;
                ContentDisposition disposition;
                data = new Attachment(sFileName, MediaTypeNames.Application.Octet);//实例化附件 
                disposition = data.ContentDisposition;
                disposition.CreationDate = System.IO.File.GetCreationTime(sFileName);//获取附件的创建日期 
                disposition.ModificationDate = System.IO.File.GetLastWriteTime(sFileName);//获取附件的修改日期 
                disposition.ReadDate = System.IO.File.GetLastAccessTime(sFileName);//获取附件的读取日期 
                msg.Attachments.Add(data);//添加到附件中

            }
            var aa1 = filter["emaillist"].ToString();
            string b = aa1.Substring(1, aa1.Length - 2);
            string[] myArray = b.Trim().Split(',');
            for (int i = 0; i < myArray.Length; i++)
            {
                var aaa = myArray[i];
                string bbb = aaa.Trim().Replace("\"", "");
                if (!string.IsNullOrWhiteSpace(bbb))
                {
                    
                    msg.To.Add(bbb);//收件人地址  
                    msg.CC.Add(bbb);//抄送人地址  
                    msg.From = new MailAddress(cfg.Network.UserName, "邮箱通知");//发件人邮箱,名称  
                    msg.Subject = "邮箱通知";//邮件标题  
                    msg.SubjectEncoding = Encoding.UTF8;//标题格式为UTF8  

                    msg.Body = emailcontent;//邮件内容  
                    msg.BodyEncoding = Encoding.UTF8;//内容格式为UTF8  

                    SmtpClient client = new SmtpClient();

                    client.Host = "smtp.qq.com";//SMTP服务器地址  
                    client.Port = 587;//SMTP端口,QQ邮箱填写587  

                    client.EnableSsl = true;//启用SSL加密  
                                            //发件人邮箱账号,授权码(注意此处,是授权码你需要到qq邮箱里点设置开启Smtp服务,然后会提示你第三方登录时密码处填写授权码) 
                    client.Credentials = new System.Net.NetworkCredential(cfg.Network.UserName, "tcxsctevlbsjdhii");


                    client.Send(msg);//发送邮件 
                }
            };
            
            
            return new Response
            {
                Result = 1
            };
        }

 综上所述就可以实现发送邮件以及邮件附件了,希望对你有帮助

猜你喜欢

转载自blog.csdn.net/growb/article/details/123893244
今日推荐