Вложение файла в сообщение outlook Email
В этом разделе описывается, как программно вложить один или несколько файлов в исходящее сообщение электронной почты в Microsoft Outlook.
Предоставляется: Кен Гетц, MCW Technologies, LLC
Поддержка объектных моделей для вложений
В Outlook свойство Attachments объекта MailItem поддерживает вложение одного или нескольких файлов в сообщение электронной почты. Чтобы вложить один или несколько файлов к почтовому элементу перед отправкой элемента, необходимо вызвать метод Add(Object, Object, Object, Object) объекта Attachments для каждого из файлов вложений. Метод Add позволяет указать имя файла (параметрSource) и тип вложения (параметрType) с помощью перечисления OlAttachmentType . Для файлов в файловой системе укажите параметрType в качестве значения перечисления Outlook.olAttachmentType.olByValue .
Примечание Начиная с Microsoft Office Outlook 2007 это значение всегда используется для присоединения копии файла в файловой системе; Outlook.olAttachmentType.olByReference больше не поддерживается.
Кроме того, при отправке сообщения электронной почты в формате RTF можно также указать два других необязательных параметра — Position иDisplayName — при вызове метода Add . ПараметрPosition позволяет указать позицию в сообщении электронной почты, где должно отображаться вложение. Используйте одно из следующих значений для параметраPosition:
Значение 0 скрывает вложение в тексте сообщения электронной почты.
Значение 1 помещает вложение перед первым символом.
Число, большее, чем число символов в тексте элемента электронной почты, помещает вложение в конец основного текста.
Для сообщений электронной почты RTF можно также указать параметр DisplayName, который предоставляет имя, отображаемое в тексте сообщения для вложения. Для сообщений электронной почты в виде обычного текста или HTML во вложении отображается только имя файла.
Отправка сообщения с файлами в виде вложений
Пример SendEmailWithAttachments
процедуры в примере кода далее в этом разделе принимает следующее:
Ссылка на объект Приложения Outlook.
Строки, содержащие тему и текст сообщения.
Универсальный список строк, содержащих список SMTP-адресов для получателей сообщения.
Строка, содержащая SMTP-адрес отправителя.
Универсальный список строк, содержащих пути к вложенным файлам.
После создания нового элемента электронной почты код добавляет каждого получателя в свойство коллекции Recipients элемента почты . Когда код вызывает метод ResolveAll(), он задает свойства Subject и Body элемента почты перед циклом по каждому элементу в указанном списке путей к вложениям, добавляя каждый из них в свойство Attachments элемента почты .
Перед отправкой сообщения электронной почты необходимо указать учетную запись, из которой будет отправлено сообщение электронной почты. Одним из способов поиска этих сведений является использование SMTP-адреса отправителя. Функция GetAccountForEmailAddress
принимает строку, содержащую SMTP-адрес электронной почты отправителя, и возвращает ссылку на соответствующий объект Account . Этот метод сравнивает SMTP-адрес отправителя со свойством SmtpAddress для каждой настроенной учетной записи электронной почты, определенной для профиля сеанса. application.Session.Accounts
возвращает коллекцию учетных записей для текущего профиля, отслеживающую сведения обо всех учетных записях, включая учетные записи Exchange, IMAP и POP3, каждая из которых может быть связана с другим хранилищем доставки. Объект Account , имеющий связанное значение свойства SmtpAddress , соответствующее SMTP-адресу отправителя, является учетной записью, используемой для отправки сообщения электронной почты.
После определения соответствующей учетной записи код завершается, задав для свойства SendUsingAccount почтового элемента этот объект Account, а затем вызовя метод Send().
Следующие примеры управляемого кода написаны на 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.
В следующем коде показано, как программно вложить файлы в исходящие сообщения электронной почты в Outlook. Чтобы продемонстрировать эту функцию, в Visual Studio создайте управляемую надстройку Outlook с именем AttachFileAddIn
и замените содержимое файла ThisAddIn.vb или ThisAddIn.cs примером кода, показанным здесь. Измените процедуру ThisAddIn_Startup
, чтобы включить ссылку на файл в файловую систему, и обновите адреса электронной почты соответствующим образом. SMTP-адрес, включенный в вызов SendMailWithAttachments
процедуры, должен соответствовать SMTP-адресу одной из учетных записей исходящей электронной почты, настроенных ранее в Outlook.
using System.Collections.Generic;
using Outlook = Microsoft.Office.Interop.Outlook;
namespace AttachFileAddIn
{
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
List<string> attachments = new List<string>();
attachments.Add("c:\\somefile.txt");
List<string> recipients = new List<string>();
recipients.Add("john@contoso.com");
recipients.Add("john@example.com");
SendEmailWithAttachments(Application, "Test", "Body", recipients, "john@example.com",
attachments);
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
private void SendEmailWithAttachments(Outlook.Application application,
string subject, string body, List<string> recipients,
string smtpAddress, List<string> attachments)
{
// Create a new MailItem and set the To, Subject, and Body properties.
var newMail = application.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem;
// Set up all the recipients.
foreach (var recipient in recipients)
{
newMail.Recipients.Add(recipient);
}
if (newMail.Recipients.ResolveAll())
{
newMail.Subject = subject;
newMail.Body = body;
foreach (string attachment in attachments)
{
newMail.Attachments.Add(attachment, Outlook.OlAttachmentType.olByValue);
}
}
// 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();
}
private 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;
}
}
// If you get here, no matching account was found.
throw new System.Exception(string.Format("No Account with SmtpAddress: {0} exists!",
smtpAddress));
}
#region VSTO generated code
/// <summary>
/// Required method for Designer support - don't modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
#endregion
}
}
Public Class ThisAddIn
Private Sub ThisAddIn_Startup() Handles Me.Startup
Dim attachments As New List(Of String)
attachments.Add("c:\somefile.txt")
Dim recipients As New List(Of String)
recipients.Add("john@contoso.com")
recipients.Add("john@example.com")
SendEmailWithAttachments(Application, "Test", "Body", recipients, "john@contoso.com", attachments)
End Sub
Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
End Sub
Private Sub SendEmailWithAttachments(ByVal application As Outlook.Application, _
ByVal subject As String, ByVal body As String,
ByVal recipients As List(Of String),
ByVal smtpAddress As String,
ByVal attachments As List(Of 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)
' Set up all the recipients.
For Each recipient In recipients
newMail.Recipients.Add(recipient)
Next
If newMail.Recipients.ResolveAll() Then
newMail.Subject = subject
newMail.Body = body
For Each attachment As String In attachments
newMail.Attachments.Add(attachment, Outlook.OlAttachmentType.olByValue)
Next
End If
' 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
Private 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
For Each account In accounts
' When the email address matches, return the account.
If account.SmtpAddress = smtpAddress Then
Return account
End If
Next
' If you get here, no matching account was found.
Throw New System.Exception(
String.Format("No Account with SmtpAddress: {0} exists!", smtpAddress))
End Function
End Class
См. также
Присоединение элемента контакта Outlook к сообщению EmailОграничение размера вложения в outlook Email messageИзменение вложения сообщения outlook Email
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.