Отправка электронного сообщения по SMTP-адресу учетной записи (Outlook)
В этом разделе показывается создание сообщения электронной почты и его отправка из учетной записи Microsoft Outlook с использованием SMTP-адреса этой учетной записи.
|
|Приведенные ниже примеры кода создал Хельмут Обертаннер (Helmut Obertanner). Helmut является самым ценным специалистом Майкрософт с опытом работы с инструментами разработки Microsoft Office в Microsoft Visual Studio и Microsoft Office Outlook.|
Следующие примеры управляемого кода написаны на C# и Visual Basic. Для запуска примера управляемого кода для .NET Framework, который вызывает модель COM, необходимо использовать сборку взаимодействия, которая определяет и сопоставляет управляемые интерфейсы с объектами COM в библиотеке типов объектной модели. Для Outlook можно использовать Visual Studio и первичную сборку взаимодействия Outlook (PIA). Перед запуском примеров управляемого кода для Outlook 2013 убедитесь, что вы установили Outlook 2013 PIA и добавили ссылку на компонент Microsoft Outlook 15.0 Object Library в Visual Studio. В классе надстройки Outlook следует использовать следующие примеры ThisAddIn
кода (с помощью средств разработчика Office для Visual Studio). Объект Application в коде должен быть доверенным объектом Application Outlook, предоставленным объектом ThisAddIn.Globals
. Дополнительные сведения об использовании Outlook PIA для разработки управляемых решений Outlook см. в статье Справочник по основной сборке взаимодействия Outlook на веб-сайте MSDN.
В следующих примерах Sample
кода содержатся SendEmailFromAccount
методы и GetAccountForEmailAddress
класса , реализованные как часть проекта надстройки Outlook. Каждый проект добавляет ссылку на Outlook PIA на основе пространства имен Microsoft.Office.Interop.Outlook. Метод SendEmailFromAccount
принимает в качестве входных аргументов надежный объект Application и строки, которые представляют тему, основной текст, разделенный точками с запятыми список получателей и SMTP-адрес учетной записи электронной почты. Метод SendEmailFromAccount
создает объект MailItem и инициализирует свойства To, Subject и Body заданными аргументами. Чтобы найти объект Account, из которого нужно отправлять электронную почту, метод SendEmailFromAccount
вызывает метод GetAccountForEmailAddress
, сопоставляющий заданный SMTP-адрес со свойством SmtpAddress каждой учетной записи текущего профиля. Соответствующий объект Account возвращается методу SendEmailFromAccount
, который затем инициализирует свойство SendUsingAccount объекта MailItem с этим объектом Account и отправляет объект MailItem.
Ниже приведен пример кода на языке C#.
using System;
using System.Text;
using Outlook = Microsoft.Office.Interop.Outlook;
namespace OutlookAddIn1
{
class Sample
{
public static void SendEmailFromAccount(Outlook.Application application, string subject, string body, string to, string smtpAddress)
{
// Create a new MailItem and set the To, Subject, and Body properties.
Outlook.MailItem newMail = (Outlook.MailItem)application.CreateItem(Outlook.OlItemType.olMailItem);
newMail.To = to;
newMail.Subject = subject;
newMail.Body = body;
// Retrieve the account that has the specific SMTP address.
Outlook.Account account = GetAccountForEmailAddress(application, smtpAddress);
// Use this account to send the email.
newMail.SendUsingAccount = account;
newMail.Send();
}
public static Outlook.Account GetAccountForEmailAddress(Outlook.Application application, string smtpAddress)
{
// Loop over the Accounts collection of the current Outlook session.
Outlook.Accounts accounts = application.Session.Accounts;
foreach (Outlook.Account account in accounts)
{
// When the email address matches, return the account.
if (account.SmtpAddress == smtpAddress)
{
return account;
}
}
throw new System.Exception(string.Format("No Account with SmtpAddress: {0} exists!", smtpAddress));
}
}
}
Ниже приведен пример кода на языке Visual Basic.
Imports Outlook = Microsoft.Office.Interop.Outlook
Namespace OutlookAddIn2
Class Sample
Shared Sub SendEmailFromAccount(ByVal application As Outlook.Application, _
ByVal subject As String, ByVal body As String, ByVal recipients As String, ByVal smtpAddress As String)
' Create a new MailItem and set the To, Subject and Body properties.
Dim newMail As Outlook.MailItem = DirectCast(application.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)
newMail.To = recipients
newMail.Subject = subject
newMail.Body = body
' Retrieve the account that has the specific SMTP address.
Dim account As Outlook.Account = GetAccountForEmailAddress(application, smtpAddress)
' Use this account to send the email.
newMail.SendUsingAccount = account
newMail.Send()
End Sub
Shared Function GetAccountForEmailAddress(ByVal application As Outlook.Application, ByVal smtpAddress As String) As Outlook.Account
' Loop over the Accounts collection of the current Outlook session.
Dim accounts As Outlook.Accounts = application.Session.Accounts
Dim account As Outlook.Account
For Each account In accounts
' When the email address matches, return the account.
If account.SmtpAddress = smtpAddress Then
Return account
End If
Next
Throw New System.Exception(String.Format("No Account with SmtpAddress: {0} exists!", smtpAddress))
End Function
End Class
End Namespace
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.