.NET 针对465加密端口 加密协议SSL(Implicit SSL)进行的邮件发送

项目中遇到一个邮件发送功能,使用常用的的SmtpClient进行发送,在本地进行了126的邮箱进行测试通过,客户发来对应的邮箱信息后告知是使用的是465加密端口,SSL加密协议,再把相关信息进行配置替换后发现邮件发送一直报超时,一直也找不到原因。网上进行相关资料查询最终查阅到:“”465端口是Implicit SSL,由于.net FrameWork 的Bug,不能使用SmtpClint发送Implicit SSL邮件:(未去真实核对),最终在网上找到相关资料使用CDO的COM组件。

方法如下:
1、添加引用 -> COM -> Microsoft CDO for Windows2000 Library
2、在代码中引入命名空间: using CDO;

3、详细代码:

        /// <summary>
        /// 针对465加密端口 加密协议SSL(Implicit SSL)进行的邮件发送
        /// </summary>
        public void SendMailForSSL()
        {
            try
            {
                CDO.Message oMsg = new CDO.Message();
                Configuration conf = new ConfigurationClass();
                conf.Fields[CdoConfiguration.cdoSendUsingMethod].Value = CdoSendUsing.cdoSendUsingPort;
                conf.Fields[CdoConfiguration.cdoSMTPAuthenticate].Value = CdoProtocolsAuthentication.cdoBasic;
                conf.Fields[CdoConfiguration.cdoSMTPUseSSL].Value = true;
                conf.Fields[CdoConfiguration.cdoSMTPServer].Value = this.Host;//必填,而且要真实可用   
                conf.Fields[CdoConfiguration.cdoSMTPServerPort].Value = this.Port;//465特有
                conf.Fields[CdoConfiguration.cdoSendEmailAddress].Value = "<" + this.From + ">";
                conf.Fields[CdoConfiguration.cdoSendUserName].Value = this.From;//真实的邮件地址   
                conf.Fields[CdoConfiguration.cdoSendPassword].Value = this.Password;   //为邮箱密码,必须真实   


                conf.Fields.Update();

                oMsg.Configuration = conf;
                oMsg.HTMLBody = this.Body;

                oMsg.Subject = this.Subject;

                oMsg.From = this.From;
                oMsg.To = this.To;
                //ADD attachment.
                //TODO: Change the path to the file that you want to attach.
                //oMsg.AddAttachment("C:\Hello.txt", "", "");
                //oMsg.AddAttachment("C:\Test.doc", "", "");
                oMsg.Send();
            }
            catch (System.Net.Mail.SmtpException ex)
            {
                throw ex;
            }
        }  

另:

1、提示:在VS2010,在引用COM组件的时候,出现了无法嵌入互操作类型“……”,请改用适用的接口的错误提示。

2、解决方案:

选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作类型”设置为False。

涉及到的DLL有CDO,ADODB都需要做处理


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 在Delphi 10中,如果你想要通过SSL验证发送邮件,你可以使用Indy组件库提供的功能来实现。首先,你需要确保已经安装了Indy组件库。 接下来,在你的Delphi项目中,你需要导入相关的单元来使用Indy的功能。你可以在uses子句中添加以下单元: uses IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdSMTPBase, IdSMTP, IdSSLOpenSSL; 接着,你需要创建一个TIdSMTP组件,该组件用于发送邮件。你可以在你的代码中创建一个TIdSMTP对象,然后设置相关属性,例如SMTP服务器地址、端口号等。 var SMTPClient: TIdSMTP; begin SMTPClient := TIdSMTP.Create(nil); try SMTPClient.Host := 'smtp.example.com'; SMTPClient.Port := 465; SMTPClient.Username := 'yourusername'; SMTPClient.Password := 'yourpassword'; SMTPClient.UseTLS := utUseExplicitTLS; // 启用SSL验证 SMTPClient.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(SMTPClient); // 发送邮件... finally SMTPClient.Free; end; end; 在上述代码中,我们创建了一个TIdSMTP对象并设置了SMTP服务器地址、端口号、用户名和密码。我们还设置了UseTLS属性为utUseExplicitTLS,表示使用SSL验证。 最后,我们通过设置SMTPClient.IOHandler属性来添加SSL验证。我们创建了一个TIdSSLIOHandlerSocketOpenSSL对象,并把它赋值给SMTPClient.IOHandler。 现在你可以使用SMTPClient组件发送邮件了。你可以通过调用如Send或SendAsync等方法来发送邮件,具体取决于你的需求。 这样,Delphi 10中通过SSL验证发送邮件的功能就实现了。请注意,上述代码可能需要根据你自己的SMTP服务器配置进行调整。 ### 回答2: 在Delphi 10中发送带有SSL验证的电子邮件需要遵循以下步骤: 1. 首先,您需要使用SMTP组件来发送电子邮件。确保已经正确安装了SMTP组件,您可以在Delphi 10的组件库中找到它。将SMTP组件放置在您的表单上。 2. 您需要设置SMTP组件的一些属性。在SSL验证中,您需要指定SMTP服务器的地址和端口号。您可以通过设置SMTP服务器的Host和Port属性来完成。确保您输入的端口号与使用SSL的服务器设置一致。 3. 启用SSL验证。为了在Delphi 10中启用SSL验证,您需要设置SMTP组件的UseTLS属性为utUseExplicitTLS。这将告诉SMTP组件使用SSL加密传输。 4. 设置SMTP的登录凭据。对于安全的邮件服务器,您可能需要提供有效的登录凭据来发送电子邮件。您可以设置SMTP的Username和Password属性以提供这些凭据。 5. 构建您的电子邮件。设置电子邮件的收件人、主题、内容等属性。您可以使用TIdMessage组件来构建您的电子邮件。 6. 发送电子邮件。调用SMTP组件的Send方法来发送您的电子邮件。在此步骤之前,请确保您已经设置了正确的SMTP属性,并构建了有效的电子邮件。 以上就是在Delphi 10中如何发送带有SSL验证的电子邮件的步骤。请按照上述指导进行设置和发送电子邮件。 ### 回答3: Delphi 10 可以使用 Indy 组件实现发送带有 SSL 验证的电子邮件SSL 验证是一种用于确保网络通信安全的加密协议。以下是使用 Delphi 10 发送邮件进行 SSL 验证的简单示例: 首先,确保已经正确安装了 Indy 组件库。 在使用前,必须设置 TIdSMTP 组件的属性以进行 SSL 验证。设置下列属性: SMTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(SMTP); SMTP.UseTLS := utUseExplicitTLS; SMTP.Port := 587; // or 465 if using implicit SSL/TLS 然后,填充 TIdMessage 组件的属性,包括发送者、接收者、主题和正文等。 接下来,调用 TIdSMTP.Send 方法发送电子邮件。此时,会自动进行 SSL 验证。 以下是一个示例代码片段: // 实例化组件 SMTP := TIdSMTP.Create; Message := TIdMessage.Create; try // 设置 SMTP 属性 SMTP.Host := 'smtp.example.com'; SMTP.Username := 'your_username'; SMTP.Password := 'your_password'; SMTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(SMTP); SMTP.UseTLS := utUseExplicitTLS; SMTP.Port := 587; // 填充电子邮件信息 Message.From.Text := 'sender@example.com'; Message.Recipients.Add.Address := 'recipient@example.com'; Message.Subject := 'Hello from Delphi 10'; Message.Body.Text := 'This is a test email'; // 发送邮件 SMTP.Connect; try SMTP.Send(Message); finally SMTP.Disconnect; end; finally // 释放组件 SMTP.Free; Message.Free; end 以上代码示例使用了基本的 SSL 验证,通过设置 SMTP 的属性来实现。你还可以根据具体需求进行更深入的 SSL 配置。希望这个简单示例能够帮助你在 Delphi 10 中实现发送带有 SSL 验证的电子邮件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值