VisualBasic使用CDO发送SSL加密邮件【我TM还是太年轻了】

本文介绍了作者在使用Visual Basic (VB) 发送SSL加密邮件时遇到的问题及解决过程。作者首先尝试使用System.Net.Mail,但发现其不支持Implicit SSL。转向CDO(协作数据对象)后,作者成功找到并实现了使用CDO发送带有附件的电子邮件,包括设置抄送、密送、附件等高级功能。

首先,在工程里引用一个COM:Microsoft CDO for Windows 2000 Library

接着他应该会自动imports俩组件,如果没有的话你自己写:

Imports CDO
Imports ADODB

代码:

    Private Sub SendTestCDOMessage()
        Dim cdoObj As Object
        cdoObj = CreateObject("cdo.Message")


        ' TODO: 使用本地SMTP服务器
        'cdo.Configuration.Fields.item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1


        ' 设置外部SMTP服务器
        cdoObj.Configuration.Fields.item _
            ("http://schemas.microsoft.com/cdo/configuration/sendusing") _
            = CDO.CdoSendUsing.cdoSendUsingPort


        cdoObj.Configuration.Fields.item _
            ("http://schemas.microsoft.com/cdo/configuration/smtpserver") _
            = "smtp.163.com"


        cdoObj.Configuration.Fields.item _
            ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") _
            = 465


        cdoObj.Configuration.Fields.item _
            ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") _
            = CDO.CdoProtocolsAuthentication.cdoBasic


        ' 身份认证
        cdoObj.Configuration.Fields.item _
            ("http://schemas.microsoft.com/cdo/configuration/sendusername") _
            = "bbb@163.com"
        cdoObj.Configuration.Fields.item _
            ("http://schemas.microsoft.com/cdo/configuration/sendpassword") _
            = "password"
        cdoObj.Configuration.Fields.item _
            ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") _
            = "true"


        ' 我就是不知道应该这么写所以整了半天
        cdoObj.Configuration.Fields.Update()


        ' 附件
        cdoObj.AddAttachment("C:\\1010.txt", "", "")


        ' 邮件内容
        cdoObj.To = "aaa@qq.com"
        cdoObj.From = "bbb@163.com"
        cdoObj.Subject = "cdo Test"
        cdoObj.TextBody = "Send Email from vb.net using cdo"


        ' 发送
        cdoObj.Send()


        cdoObj = Nothing
        MsgBox("Done.")
    End Sub


 

想看故事的可以继续这故事简单来说,就是

我TM还是太年轻了

前两天跟几个Hi-Fi玄学家聊常识,对方甩出错误“你丫算根葱”,甩出错误信息“我用十几块钱耳机能听出320kmp3和CD的区别,你行么蠢比?”,于是我炸了 

我TM还是太年轻了

我拿VB调FFPLAY写了个盲听测试程序,AB对比,用VB的原因是不写GUI那货不计不会玩,Python写GUI实在很令人发指结果这货跟我说我做的全对啊,能分出来啊!让他截图也不截。遂决定用邮件把结果直接回传,否则还不任凭你诓我。。。于是我准备用VB写邮件发送程序,我本来以为肯定有现成的代码,我就粘粘胶水就行了 

我TM还是太年轻了

首先得到的方法是调用System.Net.Mail,代码非常简单,短时间内就搞定了。但是在我用网易邮箱SMTP的过程中,我发现只有25端口的非加密可用,465端口的SSL不可用!这是为毛?换了一个哥们的代码,仍然不起作用。于是再次爆炸。。。 

我TM还是太年轻了

最终我才明白,SMTP有Explicit SSL和Implicit SSL两种加密方式,而System.Net.Mail只支持Explicit SSL,不支持Implicit SSL。这不坑爹吗!

于是开始修改搜索关键字,感觉知道了问题所在,应该很快能搞定了。之后进入我视线的是CDO,全名协作数据对象,之前看到过,但是从来没用过,传说只有它能比较好的搞定这个问题。 

我TM还是太年轻了

我找到了官方的说明:如何使用 Visual C# 发送带有附件的电子邮件使用 Cdosys.dll 库遂想修改之为VB版本,但是看到

ADODB.Field oField = oFields["http://schemas.microsoft.com/cdo/configuration/sendusing"];

这种玩意儿的时候我还是懵了。。。这用VB怎么写?!

我TM还是太年轻了


最终找到了正确的写法,就是先弄一个CDO.Message对象,然后用item来赋值,最后用update更新。同时还找到了MSDN。

当终于明白这东西该怎么写以后,我猛然发现这东西好用得令人发指。。。


想用本地SMTP服务器,去掉注释那行就行。想加附件,一个AddAttachment结束。HTML格式邮件有HTMLBody属性。


可以用的执行接口:IMessage Interface   IBodyPart Interface    IDataSource Interface
可以用的 Fields

你可以发现,你对邮件想要的几乎所有功能,抄送,密送,附件,定时发送,都有。哎呀,这感觉。。。美得很。。。

写了这么多代码,回头一看,为了一个SB能做到这个程度,

我TM还是太连青了!。。。

另外是一个决定:以后再用VB就剁手,有必要的话用C#。。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值