小弟做了一个用web.mail.mailmessage发送邮件的程序,后来在一部机上运行时发现发不出,提示“未能访问“CDO.Message”对象”的错误,可能是因为那部机器的需要设置代理服务器才能上网的问题,请问有什么方法可以在程序里设置代理服务器和端口呢?请指教!!!

解决方案 »

  1.   

    备注
    GlobalProxySelection 存储默认代理的代理设置,WebRequest 实例使用此代理与本地网络以外的 Internet 站点联系。默认代理设置通过全局配置文件或应用程序配置文件初始化,对于个别的请求可被重写,或通过将 HttpWebRequest.Proxy 属性设置为 GetEmptyWebProxy 方法的结果被禁用。存储在 GlobalProxySelection 中的代理设置由任何 Proxy 属性未设置为其他值的 HttpWebRequest 实例使用。注意   发出请求后所做的 GlobalProxySelection 更改不在 WebRequest 中反映出来。
    示例
    [Visual Basic, C#] 下面的示例为端口 80 上名为“webproxy”的 HTTP 代理设置 GlobalProxySelection。[Visual Basic] 
    Dim proxyURI As New Uri("http://webproxy:80")
    GlobalProxySelection.Select = New WebProxy(proxyURI)[C#] 
    Uri proxyURI = new Uri("http://webproxy:80");
     GlobalProxySelection.Select = new WebProxy(proxyURI);
      

  2.   

    请问mathsword(梦在流浪) ,应该怎样使得mailmessage组件通过设定的uri去访问外部网络呢?
      

  3.   

    访问这里
    http://www.systemwebmail.com/default.aspx
      

  4.   

    to:davidyoung821 (David) 
    请问您做的程序能把邮件发送到163的邮箱里吗?我的不能。如果您的能的话,请您指教,在线等着您的帮助,谢谢。
      

  5.   

    to yanmin0224
    原来你也有这个问题,我做的程序用我的163的邮箱发不出去,后来改了用126的才可以,也不知道为什么。另外,我那个问题还没有解决,还请高手指教!
      

  6.   

    using System;
    using System.Collections;
    using System.Net.Sockets;
    using System.IO;
    using System.Text;namespace Edu.Stu.Common.Mail
    {
    ///<summary>
    /// Module ID:0005
    /// Depiction:发送邮件,支持ESMTP, 多附件
    /// Wreter:Nick
    /// Create Date;2004-12-20
    ///</summary>
    public class MailSender
    { #region "Fields"
    private string m_strFromName = "";
    private string[] m_strTo = null;
    private string m_strFrom = "";
    private string m_strPassWord = "";
    private string m_strUserName = "";
    private int m_iPort = 25;
    private string m_strServer = "";
    private int m_iPriority = 3;
    private string m_strEncoding = "8bit";
    private string m_strLanguageEncoding = "GB2312";
    private bool m_bIsHtml = true;
    private string m_strHtmlBody = "";
    private string m_strTxtBody = "";
    private string m_strSubject = "";
    private string m_strToName = "";
    private ArrayList m_alAttachments = new ArrayList ();
    #endregion  #region "Propertes"
    /// <summary>
    /// SMTP服务器域名
    /// </summary>
    public string Server 
    {
    get { return m_strServer; }
    set { if (value != m_strServer) m_strServer = value; }

      
    /// <summary>
    /// SMTP服务器端口 [默认为25]
    /// </summary>
    public int Port 
    {
    get { return m_iPort; }
    set { if (value != m_iPort) m_iPort = value; }
    } /// <summary>
    /// 用户名 [如果需要身份验证的话]
    /// </summary>
    public string UserName
    {
    get { return m_strUserName; }
    set { if (value != m_strUserName) m_strUserName = value; }
    }  /// <summary>
    /// 密码 [如果需要身份验证的话]
    /// </summary>
    public string Password 
    {
    get { return m_strPassWord; }
    set { if (value != m_strPassWord) m_strPassWord = value; }
    }  /// <summary>
    /// 发件人地址
    /// </summary>
    public string From 
    {
    get { return m_strFrom; }
    set { if (value != m_strFrom) m_strFrom = value;}
    }  /// <summary>
    /// 收件人地址
    /// </summary>
    public string[] To 
    {
    get { return m_strTo; }
    set { if (value != m_strTo) m_strTo = value;}
    }  /// <summary>
    /// 发件人姓名
    /// </summary>
    public string FromName 
    {
    get { return m_strFromName; }
    set { if (value != m_strFromName) m_strFromName = value; }
    }  /// <summary>
    /// 收件人姓名
    /// </summary>
    public string ToName 
    {
    get { return m_strToName; }
    set { if (value != m_strToName) m_strToName = value; }

       /// <summary>
    /// 邮件的主题
    /// </summary>
    public string Subject 
    {
    get { return m_strSubject; }
    set { if (value != m_strSubject) m_strSubject = value; }
    }  /// <summary>
    /// 邮件正文
    /// </summary>
    public string Body 
    {
    get { return m_strTxtBody; }
    set { if (value != m_strTxtBody) m_strTxtBody = value; }
    }  /// <summary>
    /// 超文本格式的邮件正文
    /// </summary>
    public string HtmlBody 
    {
    get { return m_strHtmlBody; }
    set { if (value != m_strHtmlBody) m_strHtmlBody = value; }
    } /// <summary>
    /// 是否是html格式的邮件
    /// </summary>
    public bool IsHtml 
    {
    get { return m_bIsHtml; }
    set { if (value != m_bIsHtml) m_bIsHtml = value; }
    }  /// <summary>
    /// 语言编码 [默认为GB2312]
    /// </summary>
    public string LanguageEncoding 
    {
    get { return m_strLanguageEncoding; }
    set { if (value != m_strLanguageEncoding) m_strLanguageEncoding = value; }
    }  /// <summary>
    /// 邮件编码 [默认为8bit]
    /// </summary>
    public string MailEncoding 
    {
    get { return m_strEncoding; }
    set { if (value != m_strEncoding) m_strEncoding = value; }
    } /// <summary>
    /// 邮件优先级 [默认为3]
    /// </summary>
    public int Priority 
    {
    get { return m_iPriority; }
    set { if (value != m_iPriority) m_iPriority = value; }
    }  /// <summary>
    /// 附件 [AttachmentInfo]
    /// </summary>
    public IList Attachments 
    {
    get { return m_alAttachments; }
    //   set { if (value != m_alAttachments) m_alAttachments = value; }

      
    #endregion #region "Struct AttachmentInfo"
    /// <summary>
    /// 附件信息
    /// </summary>
    public struct AttachmentInfo
    {
    /// <summary>
    /// 附件的文件名 [如果输入路径,则自动转换为文件名]
    /// </summary>
    public string FileName 
    {
    get { return fileName; }
    set { fileName = Path.GetFileName(value); }
    } private string fileName; /// <summary>
    /// 附件的内容 [由经Base64编码的字节组成]
    /// </summary>
    public string Bytes 
    {
    get { return bytes; }
    set { if (value != bytes) bytes = value; }
    } private string bytes;
      

  7.   

    /// <summary>
    /// 从流中读取附件内容并构造
    /// </summary>
    /// <param name="p_strFileName">附件的文件名</param>
    /// <param name="p_stream">流</param>
    public AttachmentInfo (string p_strFileName, Stream p_stream)
    {
    fileName = Path.GetFileName (p_strFileName);
    byte[] by = new byte [p_stream.Length];
    p_stream.Read (by,0,(int)p_stream.Length); // 读取文件内容
    //格式转换
    bytes = Convert.ToBase64String (by); // 转化为base64编码
    } /// <summary>
    /// 按照给定的字节构造附件
    /// </summary>
    /// <param name="p_strFileName">附件的文件名</param>
    /// <param name="ibytes">附件的内容 [字节]</param>
    public AttachmentInfo (string p_strFileName, byte[] ibytes)
    {
    fileName = Path.GetFileName (p_strFileName);
    bytes = Convert.ToBase64String (ibytes); // 转化为base64编码
    } /// <summary>
    /// 从文件载入并构造
    /// </summary>
    /// <param name="p_strPath"></param>
    public AttachmentInfo (string p_strPath)
    {
    fileName = Path.GetFileName (p_strPath);
    FileStream file = new FileStream (p_strPath, FileMode.Open);
    byte[] by = new byte [file.Length];
    file.Read (by,0,(int)file.Length); // 读取文件内容
    //格式转换
    bytes = Convert.ToBase64String (by); // 转化为base64编码
    file.Close ();
    }
    }
    #endregion #region "Functions"
    /// <summary>
    /// 发送邮件
    /// </summary>
    private void SendMail()
    {
    // 创建TcpClient对象, 并建立连接
    TcpClient tcpNewClient = null;
    try
    {
    tcpNewClient = new TcpClient (m_strServer, m_iPort);
    }
    catch (Exception)
    {
    throw new Exception ("无法连接服务器");
    }
       
    ReadString (tcpNewClient.GetStream());//获取连接信息 // 开始进行服务器认证
    // 如果状态码是250则表示操作成功
    if (!Command (tcpNewClient.GetStream(), "EHLO Localhost", "250"))
    {
    tcpNewClient.Close();
    throw new Exception ("登陆阶段失败");
    } if (m_strUserName != "")
    {
    // 需要身份验证
    if (!Command (tcpNewClient.GetStream(), "AUTH LOGIN", "334"))
    {
    tcpNewClient.Close();
    throw new Exception ("身份验证阶段失败");
    }
        
    // 此处将username转换为Base64码
    string nameB64 = ToBase64 (m_strUserName); 
    if (!Command (tcpNewClient.GetStream(), nameB64, "334"))
    {
    tcpNewClient.Close();
    throw new Exception ("身份验证阶段失败");
    }
        
    // 此处将m_strPassWord转换为Base64码
    string passB64 = ToBase64 (m_strPassWord); 
    if (!Command (tcpNewClient.GetStream(), passB64, "235"))
    {
    tcpNewClient.Close();
    throw new Exception ("身份验证阶段失败");
    }
    }
      

  8.   

    太长了,发不了啊........
    对不起啊......邮件不能发,应该是smtp服务器地址不对(当然前提是程序没有问题),你可以先telnet一下,如果可以,应该可以发,如果不行就不可以,
    比如:telnet smtp.163.com 25
          telnet smtp.sohu.com 25
    以前可以的(大概是5月份左右,163、搜狐都可以,现在不行了。)
      

  9.   

    建意使用jmail组件发送,借用126或163等邮件服务商提供的免费帐号发送。这样就既不用担心SMTP出问题,也不用考虑什么代理不代理的。如果你考虑这种做法,找我。My QQ number is 7999450.