—— 剩下的10%用来发邮件
在上文中,知道了邮件的基本格式,但我还是没有办法来通过WebDav来构造出带附件的邮件,虽然基本思路是这样:用代码生成随机的boundary字符串,然后把上传的文件转成Base64编码,通通附加到邮件里。但怎么尝试也没有成功,后来在老外的blog上发现也是说要自己构造一个文本的邮件体,后来发了邮件过去问,但是没有回音。应该是我的英文写得太烂,这是我唯一一次像老外请教没有回复的,不像某VIP,MSDN上Remoting客户端委托文章的例子根本跑不了,(基本的允许反序列化的代码都没有)还不回邮件。
一、发送邮件
最后还是通过CDO来做这一块了,所以偶的标题就是90%了。过程如下:
1、添加CDO组件的引用。
2、代码:
try
{
CDO.MessageClass Mail=new CDO.MessageClass();
Mail.To=this.TBTo.Text;
Mail.CC=this.TBCc.Text;
Mail.BCC=this.TBBcc.Text;
Mail.Subject=this.TBSubject.Text;
Mail.From=User.Identity.Name;
Mail.TextBody=this.FreeTextBox1.Text;
string userID=User.Identity.Name.Trim();
string strPassword=DAL.Data.UserModel.SelectByUserId(userID).Password.Trim();
string[] filename=this.TBAttachment.Value.ToString().Split(new char[] {','});
foreach(string s in filename)
{
if(s!=String.Empty)
{
Mail.AddAttachment(Server.MapPath("MailAttachment/"+s),userID,strPassword);
}
}
Mail.Send();
Response.Write("<script>alert(\"邮件已发送成功\")</script>");
}
catch(Exception ex)
{
Response.Write("<script>alert(\""+ex.Message+"\")</script>");
}
这段代码在调试的时候没有任何问题,但是当部署到别的机器时,出了新的问题,也引出了下面的内容。 {
CDO.MessageClass Mail=new CDO.MessageClass();
Mail.To=this.TBTo.Text;
Mail.CC=this.TBCc.Text;
Mail.BCC=this.TBBcc.Text;
Mail.Subject=this.TBSubject.Text;
Mail.From=User.Identity.Name;
Mail.TextBody=this.FreeTextBox1.Text;
string userID=User.Identity.Name.Trim();
string strPassword=DAL.Data.UserModel.SelectByUserId(userID).Password.Trim();
string[] filename=this.TBAttachment.Value.ToString().Split(new char[] {','});
foreach(string s in filename)
{
if(s!=String.Empty)
{
Mail.AddAttachment(Server.MapPath("MailAttachment/"+s),userID,strPassword);
}
}
Mail.Send();
Response.Write("<script>alert(\"邮件已发送成功\")</script>");
}
catch(Exception ex)
{
Response.Write("<script>alert(\""+ex.Message+"\")</script>");
}
二、CDO.Configuration
系统部署的时候,当运行到发送邮件,提示说SendUsing错误。当初我的机器上没有装Exchange,写的代码可以运行,但我不知道邮件发到哪去了。而在装了Exchange的机器上,都是使用本机的Exchange来发送的。我个人认为,确切的说,是与Web服务器同域的Exchange服务器。那么这里CDO.dll是怎么工作的呢?
CdoPostUsing有这么两个枚举值,具体参看SDK.http://msdn2.microsoft.com/en-us/library/ms527265.aspx
cdoSendUsingPickup |
1 |
Send message using the local SMTP service pickup directory. |
cdoSendUsingPort |
2 |
Send the message using the network (SMTP over the network). |