您的位置:首页 > 编程语言 > PHP开发

(五)电子邮件模块(SMTP协议发送带附件的邮件及抄送)

2018-03-25 10:55 351 查看
以下是我的代码
email.aspx.cs
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.Net;
using System.IO;
namespace email
{
    public partial class smtp : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {         
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            MailMessage mymail=new MailMessage();//声明一个mail对象
            mymail.From=new MailAddress("XXXX@163.com","your name");//发件人地址
            mymail.To.Add(new MailAddress(TextBox1.Text));//收件人地址
            mymail.Subject=TextBox2.Text;//邮件主题
            mymail.Body=TextBox3.Text;//发送邮件的内容
          //  string filename = Path.GetFileName(FileUpload1.FileName);//获得文件名和后缀
        
            //FileUpload1.SaveAs(Server.MapPath("~/") + filename)//保存文件到本程序的文件夹下
            Attachment myfiles = new Attachment(FileUpload1.PostedFile.InputStream, FileUpload1.PostedFile.FileName);//把上传的文件指向的文件流给附件对象
            mymail.Attachments.Add(myfiles);//发送邮件附件使用Attachments
            mymail.CC.Add(new MailAddress(TextBox4.Text));//抄送邮件用CC

            SmtpClient myclient=new SmtpClient();//创建一个邮件服务器
            myclient.Host="smtp.163.com";//使用的163的SMTP服务器
            myclient.Port=25;//smtp服务器端口
            myclient.Credentials=new NetworkCredential("XXXX@163.com", "XXXX");//网易的邮箱及密码
            myclient.Send(mymail);
            Response.Write("成功!");
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            TextBox1.Text = "";
            TextBox2.Text = "";
            TextBox3.Text = "";
        }
      }
    }   
使用SMTP发送邮件不难,但是我在发附件的时候就出现了问题。一开始我使用的是 Attachment attachment = new Attachment(FileUpload1.PostedFile.FileName);代码在这里就出现问题了,说是未能找到文件“c:\program files (x86)\iis express\ccc.doc”。的确,我上传的要发送的文件不再这里,它在我另一个盘。上网搜了很久,很多人都是这样写,终于找了好久,找到了解决方法,https://bbs.csdn.net/topics/370265794。在找到这个方法前,我尝试了
      string filename = Path.GetFileName(FileUpload1.FileName);//获得文件名和后缀
        
         FileUpload1.SaveAs(Server.MapPath("~/") + filename)//保存文件到本程序的文件夹下

        Attachment myfiles = new Attachment(Server.MapPath("~/") + filename);
这个虽然可以成功,但是却要把我上传的文件保存到我的程序文件夹下,如果我传了很多,那么岂不是我的文件夹要爆,所以我放弃了这个方法。
  使用Attachment attachment = new Attachment(FileUpload1.PostedFile.FileName); 这句话出现问题的原因是file.PostedFile.FileName是文件在客户端上的路径,而我们的那些代码都运行在服务端。后面的做法是直接把上传的文件指向的文件流给我们的附件对象。
email.aspx
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <p>
            收件人地址:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        </p>
        <p>
            邮件主题:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
        </p>
        <p>
            邮件内容:<asp:TextBox ID="TextBox3" runat="server" TextMode="MultiLine"></asp:TextBox>
        </p>
        <p>
            抄送:<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
        </p>
        添加附件:<asp:FileUpload ID="FileUpload1" runat="server" />
        <br />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="发送邮件" />
        <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="重新填写" />
    </form>
</body>

</html>
上传大附件会出现 HTTP 错误 404.13 - Not Found    这时我们需要改配置文件,加入<system.webServer>

 <system.webServer>    
<security>
      <requestFiltering >
        <requestLimits maxAllowedContentLength="1024000000" ></requestLimits>
      </requestFiltering>
    </security>
  </system.webServer>
仅仅加入这个还是不够的,还需要改我们的 httpRuntime节点,<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />否则会出现超过了最大请求长度问题。
代码https://github.com/1126048156/email.githttps://github.com/1126048156/email.git
https://github.com/1126048156/email.git
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  asp.net