zoukankan      html  css  js  c++  java
  • 如何通过需要验证的邮件服务器发送邮件? dodo

    .net1.1下
    System.Web.Mail.SmtpMail.Send
    调用了内部方法: SmtpMail.CdoSysHelper.Send(message);


    CdoSysHelper.Send的内部方法实现为:

    if ((text2 != null) || (message.Fields.Count > 0))
    {
    object obj4 = SmtpMail.LateBoundAccessHelper.GetPropStatic(obj1, "Configuration");
    if (obj4 != null)
    {
    if (text2 != null)
    {
    SmtpMail.LateBoundAccessHelper.SetPropStatic(obj4, "Fields", "http://schemas.microsoft.com/cdo/configuration/sendusing", 2);
    SmtpMail.LateBoundAccessHelper.SetPropStatic(obj4, "Fields", "http://schemas.microsoft.com/cdo/configuration/smtpserver", text2);
    SmtpMail.LateBoundAccessHelper.SetPropStatic(obj4, "Fields", "http://schemas.microsoft.com/cdo/configuration/smtpserverport", 0x19);
    }
    foreach (DictionaryEntry entry1 in message.Fields)
    {
    SmtpMail.LateBoundAccessHelper.SetPropStatic(obj4, "Fields", (string) entry1.Key, entry1.Value);
    }
    object obj5 = SmtpMail.LateBoundAccessHelper.GetPropStatic(obj4, "Fields");
    SmtpMail.LateBoundAccessHelper.CallMethodStatic(obj5, "Update", new object[0]);
    Marshal.ReleaseComObject(obj5);
    Marshal.ReleaseComObject(obj4);
    }
    }

    因为如下的信息:
    foreach (DictionaryEntry entry1 in message.Fields)
    {
    SmtpMail.LateBoundAccessHelper.SetPropStatic(obj4, "Fields", (string) entry1.Key, entry1.Value);
    }

    [/code]
    故我们可以自己添加相关的CDO属性:
    如使用需要认证的SMTP SERVER,则我们可以加入

    MailMessage myMail = new MailMessage();
    myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername",userName);
    myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword",password);

    这样就达到了认证的效果.

    例子代码如下:

    MailMessage myMail = new MailMessage();
            myMail.From = emailFrom;
            myMail.To = emailTo;
            myMail.Subject = subject;
            myMail.Body = sb.ToString();
            myMail.BodyFormat = MailFormat.Html;
            myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing","2");
            //发送地址,有的邮件服务器会做检验,最好加上
            myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendemailaddress",emailFrom);
            myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpuserreplyemailaddress",emailFrom);
            //SMTP帐户名称
            myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpaccountname",userName);
            //验证用户名
            myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername",Your 163.com'suserName);
            //验证密码
            myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword",your 163.com'spassword);
           
            //验证方式,0为匿名不需要验证,1为basic (clear text)验证方式,2为NTLM验证方式
            myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate","1");
            //SMTP服务器地址,也可以在后面指定
            myMail.p.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver","smtp.163.com");
            //SmtpMail.SmtpServer = "smtp.163.com";
            //邮件内容为文本还是HTML
            myMail.Body = Web.Mail.MailFormat.Html;
            //邮件级别
            myMail.Priority = Web.Mail.MailPriority.High;
            //SmtpMail.SmtpServer = "smtp.163.com";
            SmtpMail.Send(myMail);

    附CdoConfiguration相关属性参考:

    public abstract class CdoConfiguration
    {
    // Fields
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoAutoPromoteBodyParts = "http://schemas.microsoft.com/cdo/configuration/autopromotebodyparts";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoFlushBuffersOnWrite = "http://schemas.microsoft.com/cdo/configuration/flushbuffersonwrite";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoHTTPCookies = "http://schemas.microsoft.com/cdo/configuration/httpcookies";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoLanguageCode = "http://schemas.microsoft.com/cdo/configuration/languagecode";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoNNTPAccountName = "http://schemas.microsoft.com/cdo/configuration/nntpaccountname";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoNNTPAuthenticate = "http://schemas.microsoft.com/cdo/configuration/nntpauthenticate";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoNNTPConnectionTimeout = "http://schemas.microsoft.com/cdo/configuration/nntpconnectiontimeout";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoNNTPServer = "http://schemas.microsoft.com/cdo/configuration/nntpserver";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoNNTPServerPickupDirectory = "http://schemas.microsoft.com/cdo/configuration/nntpserverpickupdirectory";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoNNTPServerPort = "http://schemas.microsoft.com/cdo/configuration/nntpserverport";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoNNTPUseSSL = "http://schemas.microsoft.com/cdo/configuration/nntpusessl";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoPostEmailAddress = "http://schemas.microsoft.com/cdo/configuration/postemailaddress";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoPostPassword = "http://schemas.microsoft.com/cdo/configuration/postpassword";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoPostUserName = "http://schemas.microsoft.com/cdo/configuration/postusername";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoPostUserReplyEmailAddress = "http://schemas.microsoft.com/cdo/configuration/postuserreplyemailaddress";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoPostUsingMethod = "http://schemas.microsoft.com/cdo/configuration/postusing";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoSaveSentItems = "http://schemas.microsoft.com/cdo/configuration/savesentitems";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoSendEmailAddress = "http://schemas.microsoft.com/cdo/configuration/sendemailaddress";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoSendPassword = "http://schemas.microsoft.com/cdo/configuration/sendpassword";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoSendUserName = "http://schemas.microsoft.com/cdo/configuration/sendusername";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoSendUserReplyEmailAddress = "http://schemas.microsoft.com/cdo/configuration/senduserreplyemailaddress";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoSendUsingMethod = "http://schemas.microsoft.com/cdo/configuration/sendusing";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoSMTPAccountName = "http://schemas.microsoft.com/cdo/configuration/smtpaccountname";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoSMTPAuthenticate = "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoSMTPConnectionTimeout = "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoSMTPServer = "http://schemas.microsoft.com/cdo/configuration/smtpserver";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoSMTPServerPickupDirectory = "http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoSMTPServerPort = "http://schemas.microsoft.com/cdo/configuration/smtpserverport";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoSMTPUseSSL = "http://schemas.microsoft.com/cdo/configuration/smtpusessl";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoURLGetLatestVersion = "http://schemas.microsoft.com/cdo/configuration/urlgetlatestversion";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoURLProxyBypass = "http://schemas.microsoft.com/cdo/configuration/urlproxybypass";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoURLProxyServer = "http://schemas.microsoft.com/cdo/configuration/urlproxyserver";
    [MarshalAs(UnmanagedType.BStr)]
    public const string cdoUseMessageResponseText = "http://schemas.microsoft.com/cdo/configuration/usemessageresponsetext";
    }


    相关链接:
    1.www.systemwebmail.com
    2.http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebmail.asp

    net2.0下

    .net Framework 2.0 下,在 System.Net.Mail 命名空间中提供了对邮件操作的支持,他的功能更强大。比如你的邮件服务器需要验证才能发送邮件,代码就只需简单成如下:

    public static void SendSMTPEMail(string strSmtpServer, string strFrom, string strFromPass, string strto, string strSubject, string strBody)
    ...{
        System.Net.Mail.SmtpClient client = new SmtpClient(strSmtpServer);
        client.UseDefaultCredentials = false;
        client.Credentials = new System.Net.NetworkCredential(strFrom, strFromPass);
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
       
        System.Net.Mail.MailMessage message = new MailMessage(strFrom, strto, strSubject, strBody);
        message.BodyEncoding = System.Text.Encoding.UTF8;
        message.IsBodyHtml = true;

        client.Send(message);
    }


    我们可以通过修改 UseDefaultCredentials  Credentials  DeliveryMethod  等属性,方便的支持各种情况下发送邮件的方式。


  • 相关阅读:
    不懂编程,不会数据架构,同事做的可视化报表是如何让我佩服的?
    catalina.sh设置JAVA_HOME后还无法解决更换JDK有关问题
    TOMCAT数据源连接配置
    L​i​n​u​x​下​配​置​T​o​m​c​a​t
    linux下JAVA开发的环境配置
    tomcat catalina.sh JAVA_OPTS参数说明与配置
    TOMCAT-报错The BASEDIR environment variable is not defined correctly
    EBS条形码打印
    PA模块报错-实际返回的行数超出请求的行数(分析标准FORM报错解决思路)
    WIP完工入库及完工退回的几个重要问题
  • 原文地址:https://www.cnblogs.com/zgqys1980/p/545205.html
Copyright © 2011-2022 走看看