Отправить письмо из Excel в среде Exchange
У меня есть пользовательская форма, которая помогает различным пользователям вводить данные в электронную таблицу. Как только данные вставлены, их также следует отправить по электронной почте нескольким получателям, в зависимости от параметров, заполненных в форме.
Это происходит в корпоративной среде с использованием Exchange. Я бы создал новую учетную запись электронной почты для этого файла, чтобы иметь возможность отправлять электронную почту как сущность, а не использовать учетную запись электронной почты пользователя.
Это возможно? Как? Я гуглил это, и все, что я могу найти, - это как создать почтовое сообщение, которое пользователь отправляет со своей учетной записи.
3 ответа
Я использовал приведенный ниже код ( исходный код) для отправки электронных писем из 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
К сожалению, я не могу проверить эту гипотезу в настоящее время, так как я настроен только для отправки с одного аккаунта. Дайте мне знать, как это работает!
Если приложение 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
Почему бы не использовать объектную модель Outlook?
Вы можете дать текущему пользователю право на отправку от имени указанного пользователя, затем установить MailItem.SentOnBehalfOfName
а также MailItem.ReplyRecipients
(при необходимости) свойства перед позывным MailItem.Send
,