通过vb中的outlook发送电子邮件时出错?

时间:2012-02-14 10:21:54

标签: vb.net email error-handling outlook send

  

未处理的类型异常   发生'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 = OutlookMes​​sage.Recipients

如果它不是太复杂,有没有办法在没有前景的情况下做到这一点?因为当用户没有安装Outlook时会发生什么?如果有人可以帮助我,我需要一种从我的应用程序发送电子邮件的方法:)

1 个答案:

答案 0 :(得分:0)

我从来没有尝试过你正在做的事情,但不应该是你的行:

   Dim OutlookMessage As outlook.MailItem = AppOutlook.CreateItem(outlook.OlItemType.olMailItem)
   AppOutlook = CreateObject("Outlook.Application")

被逆转?那么你的OutlookMes​​sage不是基于那个新实例?当然,是的,如果他们没有安装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)

但这对我来说有点不对劲。我想我可以尝试其中一种解决方案,如果不是这样的话,可以给用户提供一些设置。