Отправить письмо из Excel в среде Exchange - PullRequest
2 голосов
/ 25 мая 2011

У меня есть пользовательская форма, которая помогает различным пользователям вводить данные в электронную таблицу. Как только данные вставлены, их также следует отправить по электронной почте нескольким получателям, в зависимости от параметров, заполненных в форме.

Это происходит в корпоративной среде с использованием Exchange. Я хотел бы создать новую учетную запись электронной почты для этого файла, чтобы иметь возможность отправлять электронную почту как сущность и не использовать учетную запись электронной почты пользователя.

Возможно ли это? Как? Я нашел его в Google, и все, что я могу найти, - это как создать почтовое сообщение, которое пользователь отправляет со своей учетной записи.

Ответы [ 3 ]

4 голосов
/ 26 мая 2011

Я использовал приведенный ниже код ( источник ) для отправки электронных писем из Excel-VBA. Я протестировал его только с моей собственной учетной записью электронной почты, но я предполагаю, что вы можете отправить его с другой учетной записи (msgOne.from = ...), если у пользователя есть разрешение на отправку с этой учетной записи на сервере Exchange.

Dim cdoConfig
Dim msgOne

Set cdoConfig = CreateObject("CDO.Configuration")
With cdoConfig.Fields
    .Item(cdoSendUsingMethod) = cdoSendUsingPort
    .Item(cdoSMTPServerPort) = 25 '465 ' (your port number) usually is 25
    .Item(cdoSMTPServer) = "smtp.mysmtpserver.com" ' your SMTP server goes here
    '.Item(cdoSendUserName) = "My Username"
    '.Item(cdoSendPassword) = "myPassword"
    .Update
End With

Set msgOne = CreateObject("CDO.Message")
Set msgOne.Configuration = cdoConfig
msgOne.To = "someone@somewhere.com"
msgOne.from = "me@here.com"
msgOne.subject = "Test CDO"
msgOne.TextBody = "It works just fine."
msgOne.Send

К сожалению, я не могу проверить эту гипотезу в настоящее время, так как я настроен только для отправки с одного аккаунта. Дайте мне знать, как это работает!

2 голосов
/ 07 июня 2011

Если приложение excel работает на машине с outlook, вы можете выполнить следующее:

Function SendEmailWithOutlook(er As emailRecord, 
           recipients As String, 
           cc As String, 
           subject As String, 
           body As String, 
           attachmentPath As String) As Boolean
    Dim errorMsg As String
    Dim OutApp As Object
    Dim OutMail As Object
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    On Error GoTo errHandle
    If (er.useTestEmail = True) Then
        recipients = er.emailTest
        cc = er.emailTest
    End If
    With OutMail
        If er.emailFrom <> "" Then
            .sentOnBehalfOfName = er.emailFrom
        End If
        .To = recipients
        .cc = cc
        .bcc = er.emailBcc
        .subject = subject
        .htmlBody = body
        If attachmentPath <> "" Then
            .Attachments.Add attachmentPath
        End If
        .Send   'or use .Display
    End With
    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing
    SendEmailWithOutlook = True
    Exit Function
errHandle:
    errorMsg = "Error sending mail via outlook: " & Err.Description & vbCrLf
    errorMsg = errorMsg & "OnBehalfOf:" & er.emailFrom & vbCrLf
    errorMsg = errorMsg & "Recipients: " & recipients & vbCrLf
    errorMsg = errorMsg & "CC: " & cc & vbCrLf
    errorMsg = errorMsg & "BCC: " & er.emailBcc
    MsgBox errorMsg
    SendEmailWithOutlook = False
End Function

Добавить ссылку на библиотеку объектов Microsoft Outlook 14.0

0 голосов
/ 27 мая 2011

Почему бы не использовать объектную модель Outlook?

Вы можете дать текущему пользователю право на отправку от имени указанного пользователя, затем установить свойства MailItem.SentOnBehalfOfName и MailItem.ReplyRecipients (при необходимости) перед позывным MailItem.Send.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...