未处理的类型异常 发生'System.Runtime.InteropServices.COMException' myprogram.exe
附加信息:操作已中止(HRESULT异常: 0x80004004(E_ABORT))
以下代码导致错误:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim AppOutlook As New outlook.Application
Dim OutlookMessage As outlook.MailItem = AppOutlook.CreateItem(outlook.OlItemType.olMailItem)
AppOutlook = CreateObject("Outlook.Application")
Dim Recipents As outlook.Recipients = OutlookMessage.Recipients
Recipents.Add("oliverbroomhall1712@hotmail.co.uk")
OutlookMessage.Subject = "Sending through Outlook"
OutlookMessage.Body = "Testing outlook Mail"
OutlookMessage.Send()
OutlookMessage = Nothing
AppOutlook = Nothing
End Sub
错误发生在第7行,其中说:
Dim Recipents as outlook.Recipients = OutlookMessage.Recipients
如果它不是太复杂,有没有办法在没有前景的情况下做到这一点?因为当用户没有安装Outlook时会发生什么?如果有人可以帮助我,我需要一种从我的应用程序发送电子邮件的方法:)
答案 0 :(得分:0)
我从来没有尝试过你正在做的事情,但不应该是你的行:
Dim OutlookMessage As outlook.MailItem = AppOutlook.CreateItem(outlook.OlItemType.olMailItem)
AppOutlook = CreateObject("Outlook.Application")
被逆转?那么你的OutlookMessage不是基于那个新实例?当然,是的,如果他们没有安装Outlook,你会遇到什么问题。
我认为,如果没有从您的用户那里获取电子邮件设置信息,那么以一种始终有效的方式发送电子邮件可能会有些困难。考虑端口25阻塞和SMTP过滤等。即使您使用了用户为控制面板中列出的邮件输入的设置,现在很多人都使用基于Web的电子邮件,我无法想象这会起作用。我想你可以使用你知道会发送的自己的电子邮件帐户。
Dim Smtp As New SmtpClient()
Smtp.Credentials = New Net.NetworkCredential("user@gmail.com", "password")
Smtp.EnableSsl = True
Smtp.Port = 587
Smtp.Host = "smtp.gmail.com"
Dim Email As New MailMessage()
Email.From = New MailAddress("user@gmail.com")
Email.To.Add("oliverbroomhall1712@gmail.com")
Email.Subject = "Test Mail"
Email.Body = "SMTP server test"
Smtp.Send(Email)
但这对我来说有点不对劲。我想我可以尝试其中一种解决方案,如果不是这样的话,可以给用户提供一些设置。