本人在使用MailMessage 发送邮件的过程中,英文操作系统下出现问题,当附件名称中存在汉字时,发送出现错误,错误如下:
.Message "Could not access 'CDO.Message' object."
.StackTrace
at System.Web.Mail.LateBoundAccessHelper.CallMethod(Object obj, String methodName, Object[] args)\r\n
at System.Web.Mail.CdoSysHelper.Send(MailMessage message)\r\n
at System.Web.Mail.SmtpMail.Send(MailMessage message)\r\n 请求帮忙。
.Message "Could not access 'CDO.Message' object."
.StackTrace
at System.Web.Mail.LateBoundAccessHelper.CallMethod(Object obj, String methodName, Object[] args)\r\n
at System.Web.Mail.CdoSysHelper.Send(MailMessage message)\r\n
at System.Web.Mail.SmtpMail.Send(MailMessage message)\r\n 请求帮忙。
Dim Jmail As Object
Jmail = Server.CreateObject("Jmail.Message")
Jmail.AddRecipient(textsjr.Text.ToString)
Jmail.From = textfjr.Text.ToString
Jmail.FromName = textfjrname.Text.ToString
Jmail.Subject = textzt.Text.ToString
'Jmail.mailfoot = "请不要直接回复本邮件,因为它是自动发送的。" & vbCrLf & vbCrLf & "本邮件来自华夏互动http://www.c-a.cnt/ "
Jmail.Body = textzw.Text.ToString '& vbCrLf & vbCrLf & Jmail.mailfoot
'邮件底部的广告
'Jmail.AddAttachment("")
Jmail.Send("UserName:[email protected]")
'Jmail.sendok = Jmail.send("UserName:[email protected]")
'If Jmail.sendok Then 'Else
' message.Text = "发送密码失败,可能是您填写了错误的邮件地址。<br>" & _
' "如果您确信没有写错邮件地址,则可能是发信程序出了<br>" & _
' "故障,请与管理员联系"
' End If
If Not Jmail.Send(textsjr.Text.ToString) Then
message.Text = "邮件发送失败!"
Else
message.Text = "已成功将邮件发送到:" & vbCrLf & textsjr.Text.ToString
End If
Jmail.Close()
textsjr.Text = ""
textzt.Text = ""
textzw.Text = ""
End Sub
首先感谢您的回复,可是您的代码中并没有去解决我的问题,我的问题是“发送邮件的过程中,英文操作系统下出现问题,当附件名称中存在汉字时,发送出现错误”,而您的代码中没有带附件。 也就是说,在中文简体、中文繁体操作系统下都没有问题,并且在英文操作系统下发送不带汉字的附件时也没有问题,只是发送带中文的附件才出现此现象,请您再关注一下,谢谢。
methodName, Object[] args)\r\n
at System.Web.Mail.CdoSysHelper.Send(MailMessage message)\r\n
at System.Web.Mail.SmtpMail.Send(MailMessage message)\r\n
这些信息告诉我们失败的可能原因是格式问题
也就是说需要进行格式转换
\r\n需要转换为\r
你的程序需要一个函数 用来转换成这种格式继续关注
楼主情查阅相关资料
byte[] bWrite = Encoding.Unicode.GetBytes(str);
To: v_object(牵只蚂蚁蹓跶) 我把附件的名字换成英文的就OK了,可见不是你所说的原因,另外我用了一个空的Txt文件依然不行!
没有人在这方面处理过吗??
你写个函数把message转换一下
加入以下代码:
Email.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");//基本验证
Email.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", UserName ); //设定用户名
Email.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", Pwd );//设定密码
不过我现在也遇到问题了,不是正文中如果想发送的是HTML标记本身,则接收到后就不对了。如我要发送的是<html><body></body>dkdsjsdfakal</html>,结果接收到的是&lthtml>&lbody>....,并不是我要的。我的代码是 Email.BodyFormat = MailFormat.Html;
Email.Body = Server.HtmlEncode ( this.txtBody.Text );
有那位高手能帮我解决吗,我都快疯了!!!!!
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Text;namespace Modal
{
/// <summary>
/// 邮件发送类
/// </summary>
public class TMailClass
{
private string FEnter="\r\n";
/// <summary>
/// 设定语言代码,默认设定为GB2312,如不需要可设置为""
/// </summary>
public string Charset="GB2312";
/// <summary>
/// 发件人地址
/// </summary>
public string From="";
/// <summary>
/// 发件人姓名
/// </summary>
public string FromName="";
/// <summary>
/// 回复邮件地址
/// </summary>
//public string ReplyTo="";
/// <summary>
/// 收件人姓名
/// </summary>
public string ToName="";
/// <summary>
/// 收件人列表
/// </summary>
private Hashtable FTo=new Hashtable();
/// <summary>
/// 邮件服务器域名
/// </summary>
private string FSmtpServer="";
/// <summary>
/// 邮件服务器端口号
/// </summary>
private int FServerPort=25;
/// <summary>
/// SMTP认证时使用的用户名
/// </summary>
private string FUserName="";
/// <summary>
/// SMTP认证时使用的密码
/// </summary>
private string FPassWord="";
/// <summary>
/// 是否需要SMTP验证
/// </summary>
private bool FIsSmtp=false;
/// <summary>
/// 是否Html邮件
/// </summary>
public bool IsHtml=false;
/// <summary>
/// 邮件附件列表
/// </summary>
private System.Collections.ArrayList FAttachments;
/// <summary>
/// 邮件发送优先级,可设置为"High","Normal","Low"或"1","3","5"
/// </summary>
private string FPriority="Normal";
/// <summary>
/// 邮件主题
/// </summary>
public string Subject="";
/// <summary>
/// 邮件正文
/// </summary>
public string Body="";
/// <summary>
/// 收件人数量
/// </summary>
private int FToNum=0;
/// <summary>
/// 最多收件人数量
/// </summary>
private int FToMaxNum=100;
/// <summary>
/// 密件收件人数量
/// </summary>
//private int RecipientBCCNum=0;
/// <summary>
/// 错误消息反馈
/// </summary>
private string FErrMsg;
/// <summary>
/// TcpClient对象,用于连接服务器
/// </summary>
private TcpClient FTcpClient;
/// <summary>
/// NetworkStream对象
/// </summary>
private NetworkStream FNetSrm;
/// <summary>
/// SMTP错误代码哈希表
/// </summary>
private Hashtable FErrCodeHT = new Hashtable();
/// <summary>
/// SMTP正确代码哈希表
/// </summary>
private Hashtable FRightCodeHT = new Hashtable();
public TMailClass()
{
FAttachments = new System.Collections.ArrayList();
}
/// 邮件服务器域名和验证信息
/// 形如:"user:paswww.server.com:25",也可省略次要信息。如"user:paswww.server.com"www.server.com"
/// </summary>
public string SmtpServer
{
set
{
string maidomain=value.Trim();
int tempint; if(maidomain!=""
{
tempint=maidomain.IndexOf("@");
if(tempint!=-1)
{
string str=maidomain.Substring(0,tempint);
UserName=str.Substring(0,str.IndexOf(":"));
PassWord=str.Substring(str.IndexOf(":")+1,str.Length-str.IndexOf(":")-1);
maidomain=maidomain.Substring(tempint+1,maidomain.Length-tempint-1);
} tempint=maidomain.IndexOf(":");
if(tempint!=-1)
{
FSmtpServer=maidomain.Substring(0,tempint);
FServerPort=System.Convert.ToInt32(maidomain.Substring(tempint+1,maidomain.Length-tempint-1));
}
else
{
FSmtpServer=maidomain;
}
}
}
}
/// 邮件服务器端口号
/// </summary>
public int ServerPort
{
set
{
FServerPort=value;
}
} /// <summary>
/// SMTP认证时使用的用户名
/// </summary>
public string UserName
{
set
{
if(value.Trim()!="")
{
FUserName=value.Trim();
FIsSmtp=true;
}
else
{
FUserName="";
FIsSmtp=false;
}
}
} /// <summary>
/// SMTP认证时使用的密码
/// </summary>
public string PassWord
{
set
{
FPassWord=value;
}
}