Отправить Outlook Email через Python с именем скрытого / другого отправителя? - PullRequest
0 голосов
/ 11 октября 2019

Я нахожусь в бизнес-проекте с Python, где моя команда будет отправлять автоматический отчет в некоторых командах. Код для его отправки работает достаточно хорошо:

import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = 'To address'
mail.Subject = 'Message subject'
mail.Body = 'Message body'
mail.HTMLBody = '<h2>HTML Message body</h2>' #this field is optional

# To attach a file to the email (optional):
attachment  = "Path to the attachment"
mail.Attachments.Add(attachment)

mail.Send()

Благодаря этой теме: Отправка электронной почты Outlook через Python?

Есть ли способ изменить адресотправитель, что-то вроде:

mail.From = 'Team Adress'

В противном случае проблема будет в том, что люди ответят на почту на мой адрес электронной почты, что будет таким неверным подходом. Или это вообще невозможно, потому что это должно открыть мою учетную запись Outlook?

1 Ответ

1 голос
/ 11 октября 2019

Существует два возможных способа указания отправителя:

  1. Если в Outlook настроено несколько учетных записей, вы можете использовать свойство MailItem.SendUsingAccount , которое позволяет установить Account объект, представляющий учетную запись, под которой должен быть отправлен MailItem. Например:
        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)); 
        } 
Свойство MailItem.SentOnBehalfOfName позволяет задать строку, указывающую отображаемое имя для предполагаемого отправителя почтового сообщения. Имейте в виду, вам нужно разрешение, чтобы иметь возможность отправлять что-либо от имени другого человека.
...