如何使用 Outlook 库在 vb.net 中发送电子邮件
How to send emails in vb.net using the Outlook Library
我在 visual studio 中尝试使用 Microsoft Outlook 库通过 VB.net 通过 Outlook 发送和接收电子邮件时遇到问题。我尝试关注 Microsoft 网站页面,但它在 VBA 中并且根本没有帮助,因为我首先尝试调用库时遇到问题。我进入了依赖项并添加了以下 COM 的 Microsoft Outlook 16.0 Object Library
和 Microsoft Outlook View Control
。但我不确定我是否需要在我的代码中的某个地方引用它们,我什至不确定该命令是什么,直到现在我所拥有的只是:Code。我如何给图书馆打电话和发邮件。[=15=]
编辑:这仅适用于 .NET Framework 2.0 或更高版本,.NET Core 似乎不起作用
Imports System
Imports System.IO
Module Program
Sub main()
Dim objOL = New Outlook.Application
Dim objNS = objOL.GetNamespace("MAPI")
Dim objFolder = objNS.GetDefaultFolder(10)
Dim Newtask As Outlook.TaskItem
' Set the Application object
Dim objOLApps = New Outlook.Application
' You can only use CreateItem for default items
Dim NewTasks = objOL.CreateItem(6)
' Display the new task form so the user can fill it out
Newtask.Display()
End Sub
End Module
安装'Microsoft.Office.Interop.Outlook' nuget包后,您可以尝试使用以下代码发送邮件(代码来自):
Imports System.IO
Imports Outlook = Microsoft.Office.Interop.Outlook
Module Module1
Sub Main()
Dim arrAttachFiles As List(Of String) = New List(Of String)() From {
"the file path you want to attach (e.g. D:\Test.xlsx)"
}
sendEmailViaOutlook("your email address", "email addresses you want to send", "email addresses you want to cc", "this is subject", "this is body", arrAttachFiles)
End Sub
Public Sub sendEmailViaOutlook(ByVal sFromAddress As String, ByVal sToAddress As String, ByVal sCc As String, ByVal sSubject As String, ByVal sBody As String, ByVal Optional arrAttachments As List(Of String) = Nothing)
Try
Dim app As Outlook.Application = New Outlook.Application()
Dim newMail As Outlook.MailItem = CType(app.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)
If Not String.IsNullOrWhiteSpace(sToAddress) Then
Dim arrAddTos As String() = sToAddress.Split(New Char() {";"c, ","c})
For Each strAddr As String In arrAddTos
If Not String.IsNullOrWhiteSpace(strAddr) AndAlso strAddr.IndexOf("@"c) <> -1 Then
newMail.Recipients.Add(strAddr.Trim())
Else
Throw New Exception("Bad to-address: " & sToAddress)
End If
Next
Else
Throw New Exception("Must specify to-address")
End If
If Not String.IsNullOrWhiteSpace(sCc) Then
Dim arrAddTos As String() = sCc.Split(New Char() {";"c, ","c})
For Each strAddr As String In arrAddTos
If Not String.IsNullOrWhiteSpace(strAddr) AndAlso strAddr.IndexOf("@"c) <> -1 Then
newMail.Recipients.Add(strAddr.Trim())
Else
Throw New Exception("Bad CC-address: " & sCc)
End If
Next
End If
If Not newMail.Recipients.ResolveAll() Then
Throw New Exception("Failed to resolve all recipients: " & sToAddress & ";" & sCc)
End If
If arrAttachments IsNot Nothing Then
For Each strPath As String In arrAttachments
If File.Exists(strPath) Then
newMail.Attachments.Add(strPath)
Else
Throw New Exception("Attachment file is not found: """ & strPath & """")
End If
Next
End If
If Not String.IsNullOrWhiteSpace(sSubject) Then newMail.Subject = sSubject
If Not String.IsNullOrWhiteSpace(sBody) Then newMail.Body = sBody
Dim accounts As Outlook.Accounts = app.Session.Accounts
Dim acc As Outlook.Account = Nothing
For Each account As Outlook.Account In accounts
If account.SmtpAddress.Equals(sFromAddress, StringComparison.CurrentCultureIgnoreCase) Then
acc = account
Exit For
End If
Next
If acc IsNot Nothing Then
newMail.SendUsingAccount = acc
newMail.Send()
Else
Throw New Exception("Account does not exist in Outlook: " & sFromAddress)
End If
Catch ex As Exception
Console.WriteLine("ERROR: Failed to send mail: " & ex.Message)
End Try
End Sub
End Module
结果:
我在 visual studio 中尝试使用 Microsoft Outlook 库通过 VB.net 通过 Outlook 发送和接收电子邮件时遇到问题。我尝试关注 Microsoft 网站页面,但它在 VBA 中并且根本没有帮助,因为我首先尝试调用库时遇到问题。我进入了依赖项并添加了以下 COM 的 Microsoft Outlook 16.0 Object Library
和 Microsoft Outlook View Control
。但我不确定我是否需要在我的代码中的某个地方引用它们,我什至不确定该命令是什么,直到现在我所拥有的只是:Code。我如何给图书馆打电话和发邮件。[=15=]
编辑:这仅适用于 .NET Framework 2.0 或更高版本,.NET Core 似乎不起作用
Imports System
Imports System.IO
Module Program
Sub main()
Dim objOL = New Outlook.Application
Dim objNS = objOL.GetNamespace("MAPI")
Dim objFolder = objNS.GetDefaultFolder(10)
Dim Newtask As Outlook.TaskItem
' Set the Application object
Dim objOLApps = New Outlook.Application
' You can only use CreateItem for default items
Dim NewTasks = objOL.CreateItem(6)
' Display the new task form so the user can fill it out
Newtask.Display()
End Sub
End Module
安装'Microsoft.Office.Interop.Outlook' nuget包后,您可以尝试使用以下代码发送邮件(代码来自):
Imports System.IO
Imports Outlook = Microsoft.Office.Interop.Outlook
Module Module1
Sub Main()
Dim arrAttachFiles As List(Of String) = New List(Of String)() From {
"the file path you want to attach (e.g. D:\Test.xlsx)"
}
sendEmailViaOutlook("your email address", "email addresses you want to send", "email addresses you want to cc", "this is subject", "this is body", arrAttachFiles)
End Sub
Public Sub sendEmailViaOutlook(ByVal sFromAddress As String, ByVal sToAddress As String, ByVal sCc As String, ByVal sSubject As String, ByVal sBody As String, ByVal Optional arrAttachments As List(Of String) = Nothing)
Try
Dim app As Outlook.Application = New Outlook.Application()
Dim newMail As Outlook.MailItem = CType(app.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)
If Not String.IsNullOrWhiteSpace(sToAddress) Then
Dim arrAddTos As String() = sToAddress.Split(New Char() {";"c, ","c})
For Each strAddr As String In arrAddTos
If Not String.IsNullOrWhiteSpace(strAddr) AndAlso strAddr.IndexOf("@"c) <> -1 Then
newMail.Recipients.Add(strAddr.Trim())
Else
Throw New Exception("Bad to-address: " & sToAddress)
End If
Next
Else
Throw New Exception("Must specify to-address")
End If
If Not String.IsNullOrWhiteSpace(sCc) Then
Dim arrAddTos As String() = sCc.Split(New Char() {";"c, ","c})
For Each strAddr As String In arrAddTos
If Not String.IsNullOrWhiteSpace(strAddr) AndAlso strAddr.IndexOf("@"c) <> -1 Then
newMail.Recipients.Add(strAddr.Trim())
Else
Throw New Exception("Bad CC-address: " & sCc)
End If
Next
End If
If Not newMail.Recipients.ResolveAll() Then
Throw New Exception("Failed to resolve all recipients: " & sToAddress & ";" & sCc)
End If
If arrAttachments IsNot Nothing Then
For Each strPath As String In arrAttachments
If File.Exists(strPath) Then
newMail.Attachments.Add(strPath)
Else
Throw New Exception("Attachment file is not found: """ & strPath & """")
End If
Next
End If
If Not String.IsNullOrWhiteSpace(sSubject) Then newMail.Subject = sSubject
If Not String.IsNullOrWhiteSpace(sBody) Then newMail.Body = sBody
Dim accounts As Outlook.Accounts = app.Session.Accounts
Dim acc As Outlook.Account = Nothing
For Each account As Outlook.Account In accounts
If account.SmtpAddress.Equals(sFromAddress, StringComparison.CurrentCultureIgnoreCase) Then
acc = account
Exit For
End If
Next
If acc IsNot Nothing Then
newMail.SendUsingAccount = acc
newMail.Send()
Else
Throw New Exception("Account does not exist in Outlook: " & sFromAddress)
End If
Catch ex As Exception
Console.WriteLine("ERROR: Failed to send mail: " & ex.Message)
End Try
End Sub
End Module
结果: