本人在使用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   请求帮忙。

解决方案 »

  1.   

    Private Sub fs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles fs.Click
            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
      

  2.   

    http://www.systemwebmail.com/default.aspx
      

  3.   

    正如SUN说的,MS搞网络简直是笑掉大牙!!!
      

  4.   

    TO:renyu732(在学.net中...)您好:
        首先感谢您的回复,可是您的代码中并没有去解决我的问题,我的问题是“发送邮件的过程中,英文操作系统下出现问题,当附件名称中存在汉字时,发送出现错误”,而您的代码中没有带附件。    也就是说,在中文简体、中文繁体操作系统下都没有问题,并且在英文操作系统下发送不带汉字的附件时也没有问题,只是发送带中文的附件才出现此现象,请您再关注一下,谢谢。
      

  5.   

    可以在报错中发现一些问题的
    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
    你的程序需要一个函数 用来转换成这种格式继续关注
    楼主情查阅相关资料
      

  6.   

    把你的文件内容什么的转成Unicode就没事了。
    byte[] bWrite = Encoding.Unicode.GetBytes(str);
      

  7.   

    To: Dr_Jones(kickyourass)  后面的“\r\n ” 是messageBox 的换行符,我没有去掉;
    To: v_object(牵只蚂蚁蹓跶) 我把附件的名字换成英文的就OK了,可见不是你所说的原因,另外我用了一个空的Txt文件依然不行!
    没有人在这方面处理过吗??
      

  8.   

    \r\n需要转换为\n 啊
    你写个函数把message转换一下
      

  9.   

    呵呵,我也正在用MailMessage写邮件发送程序,你说的问题我也碰到了,出现无法访问“CDO。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&gt&lbody&gt....,并不是我要的。我的代码是 Email.BodyFormat = MailFormat.Html;
    Email.Body = Server.HtmlEncode ( this.txtBody.Text );
    有那位高手能帮我解决吗,我都快疯了!!!!!
      

  10.   

    To: wholdbird(老来学IT)对于我的问题目前已经解决,是因为MailMessage + windows 2000 的问题,如果在 windows xp 就没有问题了,现在的解决办法是用 CDO.MessageClass  替代 MailMessge 当然了工作量大大的增加了。对于你的问题是否你的 Httml 语句有问题??我这样写是可以的呀??oMsg.Body = "<HTML><BODY><B>Hello World!</B></BODY></HTML>";
      

  11.   

    using System;
    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(); 
    }
      

  12.   

    /// <summary> 
    /// 邮件服务器域名和验证信息 
    /// 形如:"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; 
    }                 


    }
      

  13.   

    /// <summary> 
    /// 邮件服务器端口号 
    /// </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; 

    }
      

  14.   

    outMail.BodyEncoding  = Encoding.UTF8
      

  15.   

    SUN公司嘲笑MS说;MS作网络笑掉大牙!!