有两种方法可以通过SSL执行SMTP:显式和隐式。显式表示您以明文形式连接到普通SMTP端口(通常为25或587),然后发出“starttls”命令切换到SSL模式。隐式意味着你连接到一个希望所有东西都是SSL的端口(通常是465)。
Asp.net使用“System.Net.Mail.SmtpClient()”发送电子邮件。主要问题是SmtpClient不支持隐式SSL连接,但确实支持显式连接(带SSL的System.Net.Mail根据端口465进行身份验证)。因此,如果邮件服务器(SMTP)不支持显式连接,它将无法发送电子邮件和显示消息,如“连接超时”,“邮件无法发送到SMTP服务器。传输错误代码是0x80040217。服务器响应不可用“等。
要在ASP.net中解决此问题,我们可以使用用于Windows 2000库(Cdosys.dll)的协作数据对象(CDO)发送带附件的电子邮件。 Microsoft Outlook使用此DLL发送电子邮件。在您的ASP.net解决方案中,您必须添加参考“Windows 2000库的Microsoft CDO”。它会在Bin文件夹中添加两个标记为dll的文件。
现在做娄代码在C#.net:
public static void SendMail(string FromName, string FromEmail, string ReceiverEmail, string CC, string BCC, string subj, string Mssg)
{
const var cdoSendUsingPort = 2;
const var cdoBasicAuth = 1;
const var cdoTimeout = 60;
var mailServer = "mail.XXXXXXX.net";
var SMTPport = 465;
var mailusername = "[email protected]";
var mailpassword = "PPPPXXXX";
var objEmail = CreateObject("CDO.Message");
var objConf = objEmail.Configuration;
var objFlds = objConf.Fields;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = mailServer;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPport;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = cdoTimeout;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasicAuth;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = mailusername;
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = mailpassword;
objFlds.Update();
objEmail.To = ReceiverEmail;
objEmail.From = FromEmail;
objEmail.CC = CC;
objEmail.BCC = BCC;
objEmail.Subject = subj;
objEmail.HTMLBody = Mssg;
objEmail.Send();
}
在VB.net
Public Shared Sub SendMail(ByVal FromName As String, ByVal FromEmail As String, ByVal ReceiverEmail As String, ByVal CC As String, ByVal BCC As String, ByVal subj As String, ByVal Mssg As String)
''#################Sending Email##########################
Const cdoSendUsingPort = 2 ' Send the message using SMTP
Const cdoBasicAuth = 1 ' Clear-text authentication
Const cdoTimeout = 60 ' Timeout for SMTP in seconds
Dim mailServer = "mail.XXXXXXX.net"
Dim SMTPport = 465
Dim mailusername = "[email protected]"
Dim mailpassword = "PPPPXXXX"
Dim objEmail = CreateObject("CDO.Message")
Dim objConf = objEmail.Configuration
Dim objFlds = objConf.Fields
With objFlds
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = mailServer
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPport
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = cdoTimeout
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasicAuth
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = mailusername
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = mailpassword
.Update()
End With
objEmail.To = ReceiverEmail
objEmail.From = FromEmail
objEmail.CC = CC
objEmail.BCC = BCC
objEmail.Subject = subj
objEmail.HTMLBody = Mssg
'objEmail.AddAttachment "C:\report.pdf"
objEmail.Send()
End Sub
全球化志愿服务青年: Original post 隐&明确SMTP http://help.fogcreek.com/9002/using-an-smtp-server-with-ssl 使用Cdosys.dll库发送带附件的电子邮件https://support.microsoft.com/en-us/help/310212/how-to-use-the-cdosys-dll-library-to-send-an-e-mail-message-with-attac
您可以通过标准电子邮件客户端进行连接吗?否则,它可能是您防火墙的问题。您是否在帐户中启用POP访问权限? – MiffTheFox 2009-07-04 13:42:57
是的,我可以,而且我也是。 – Paul 2009-07-06 02:26:14