2015-03-27 1 views
1

Я использую PHP и Outlook для отправки электронной почты. У меня есть несколько учетных записей, настроенных в Outlook, и я хочу отправлять электронную почту с определенной учетной записи каждый раз. Мой текущий код выглядит следующим образом:Отправьте электронное письмо с помощью php из outlook (com component), используя конкретную учетную запись

if (!defined('olMailItem')) define("olMailItem",0); 
$objApp = new COM("Outlook.Application"); 
$myItem = $objApp->CreateItem(olMailItem); 
$myItem->To= '[email protected]'; 
$myItem->SentOnBehalfOfName = '[email protected]'; 
$myItem->Subject='my subject'; 

$myItem->HTMLBody='email content'; 
$myItem->Display(); 
$myItem->Send() 

с помощью $myItem->SentOnBehalfOfName не работает, он всегда посылает электронную почту с помощью учетной записи по умолчанию, но я хочу, чтобы установить с помощью учетной записи PHP.

ответ

1

Похоже, вас интересует свойство класса MailItem SendUsingAccount, которое позволяет установить объект учетной записи, который представляет учетную запись, под которую должен быть отправлен MailItem. Свойство SendUsingAccount может использоваться для указания учетной записи, которая должна использоваться для отправки MailItem при вызове метода Send. Например:

Sub SendUsingAccount() 
    Dim oAccount As Outlook.account 
    For Each oAccount In Application.Session.Accounts 
    If oAccount.AccountType = olPop3 Then 
     Dim oMail As Outlook.MailItem 
     Set oMail = Application.CreateItem(olMailItem) 
     oMail.Subject = "Sent using POP3 Account" 
     oMail.Recipients.Add ("[email protected]") 
     oMail.Recipients.ResolveAll 
     oMail.SendUsingAccount = oAccount 
     oMail.Send 
    End If 
    Next 
End Sub 

Имейте в виду, Microsoft в настоящее время не рекомендуется, и не поддерживает, автоматизации приложений Microsoft Office из любого без присмотра, не интерактивного клиентского приложения или компонента (включая ASP, ASP.NET, DCOM, и NT Services), поскольку Office может проявлять нестабильное поведение и/или тупик, когда Office запущен в этой среде.

Если вы создаете решение, которое выполняется в контексте на стороне сервера, вы должны попытаться использовать компоненты, которые были безопасны для автоматического выполнения. Или вы должны попытаться найти альтернативы, которые позволяют хотя бы часть кода запускать клиентскую сторону. Если вы используете приложение Office из серверного решения, для успешного выполнения приложения не будет достаточного количества необходимых возможностей. Кроме того, вы рискуете стабильностью своего общего решения. См. Considerations for server-side Automation of Office для получения дополнительной информации.

+0

Спасибо за ответ. Можете ли вы объяснить использование 'oMail.SendUsingAccount = oAccount', особенно то, что здесь означает' oAccount' –

+0

Это экземпляр класса Account. Посмотрите на свойство Accounts класса Namespace для получения дополнительной информации обо всех настроенных учетных записях в профиле Outlook. –

+0

Еще раз спасибо. Проблема, которую я получаю, заключается в следующем: , когда я использую 'oMail.SendUsingAccount =" [email protected] "', это не работает. Есть ли способ получить объект oAccount с использованием идентификатора электронной почты учетной записи, например: 'oAccount = new oAccount (" [email protected] ")'. –

Смежные вопросы