私は使っている Outlook 2003
。
メールを送信する最良の方法は何ですか(Outlook 2003
)Python
?を使用
Outlookを使用するソリューションについては、以下のTheoretiCALの回答を参照してください。
それ以外の場合は、pythonに付属のsmtplibを使用します。これには、電子メールアカウントでsmtpを許可する必要がありますが、これは必ずしもデフォルトで有効になっているわけではありません。
SERVER = "smtp.example.com"
FROM = "[email protected]"
TO = ["listOfEmails"] # must be a list
SUBJECT = "Subject"
TEXT = "Your Text"
# Prepare actual message
message = """From: %s\r\nTo: %s\r\nSubject: %s\r\n\
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
# Send the mail
import smtplib
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
EDIT:この例では、 RFC2606
SERVER = "smtp.example.com"
FROM = "[email protected]"
TO = ["[email protected]"] # must be a list
SUBJECT = "Hello!"
TEXT = "This is a test of emailing through smtp of example.com."
# Prepare actual message
message = """From: %s\r\nTo: %s\r\nSubject: %s\r\n\
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
# Send the mail
import smtplib
server = smtplib.SMTP(SERVER)
server.login("MrDoe", "PASSWORD")
server.sendmail(FROM, TO, message)
server.quit()
Gmailで実際に動作させるには、Doe氏がGmailの[オプション]タブに移動し、SMTP接続を許可するように設定する必要があります。
リモートサーバーに対する認証のためのログイン行が追加されていることに注意してください。元のバージョンにはこれが含まれていません。これは私の側の見落としです。
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アカウントを使用して送信します。
上記以外のことをしようとしている場合は、COM docsのプロパティ/メソッドを参照してください: https://msdn.Microsoft.com/en-us/vba/Outlook-vba/articles/mailitem-object -Outlook 。上記のコードでは、mail
はMailItemオブジェクトです。
Googleで確認してください。たくさんの例があります。1つは here をご覧ください。
見やすくするためにインライン化:
import win32com.client
def send_mail_via_com(text, subject, recipient, profilename="Outlook2003"):
s = win32com.client.Dispatch("Mapi.Session")
o = win32com.client.Dispatch("Outlook.Application")
s.Logon(profilename)
Msg = o.CreateItem(0)
Msg.To = recipient
Msg.CC = "moreaddresses here"
Msg.BCC = "address"
Msg.Subject = subject
Msg.Body = text
attachment1 = "Path to attachment no. 1"
attachment2 = "Path to attachment no. 2"
Msg.Attachments.Add(attachment1)
Msg.Attachments.Add(attachment2)
Msg.Send()
pywin32 を使用:
from win32com.client import Dispatch
session = Dispatch('MAPI.session')
session.Logon('','',0,1,0,0,'exchange.foo.com\nUserName');
msg = session.Outbox.Messages.Add('Hello', 'This is a test')
msg.Recipients.Add('Corey', 'SMTP:[email protected]')
msg.Send()
session.Logoff()
Office 365の最も簡単なソリューション:
from O365 import Message
html_template = """
<html>
<head>
<title></title>
</head>
<body>
{}
</body>
</html>
"""
final_html_data = html_template.format(df.to_html(index=False))
o365_auth = ('sender_username@company_email.com','Password')
m = Message(auth=o365_auth)
m.setRecipients('receiver_username@company_email.com')
m.setSubject('Weekly report')
m.setBodyHTML(final)
m.sendMessage()
ここdfは、html_templateに挿入されているhtmlテーブルに変換されたデータフレームです
Win32以外に、会社でWeb Outlookをセットアップしている場合は、PYTHON REST Microsoftによって公式に作成されたAPI。--- https://msdn.Microsoft.com/en-us/office/office365/api/mail-rest-operations )
これは、Win32を使用して試したものです。
import win32com.client as win32
import psutil
import os
import subprocess
import sys
# Drafting and sending email notification to senders. You can add other senders' email in the list
def send_notification():
Outlook = win32.Dispatch('Outlook.application')
olFormatHTML = 2
olFormatPlain = 1
olFormatRichText = 3
olFormatUnspecified = 0
olMailItem = 0x0
newMail = Outlook.CreateItem(olMailItem)
newMail.Subject = sys.argv[1]
#newMail.Subject = "check"
newMail.BodyFormat = olFormatHTML #or olFormatRichText or olFormatPlain
#newMail.HTMLBody = "test"
newMail.HTMLBody = sys.argv[2]
newMail.To = "[email protected]"
attachment1 = sys.argv[3]
attachment2 = sys.argv[4]
newMail.Attachments.Add(attachment1)
newMail.Attachments.Add(attachment2)
newMail.display()
# or just use this instead of .display() if you want to send immediately
newMail.Send()
# Open Outlook.exe. Path may vary according to system config
# Please check the path to .exe file and update below
def open_Outlook():
try:
subprocess.call(['C:\Program Files\Microsoft Office\Office15\Outlook.exe'])
os.system("C:\Program Files\Microsoft Office\Office15\Outlook.exe");
except:
print("Outlook didn't open successfully")
#
# Checking if Outlook is already opened. If not, open Outlook.exe and send email
for item in psutil.pids():
p = psutil.Process(item)
if p.name() == "Outlook.EXE":
flag = 1
break
else:
flag = 0
if (flag == 1):
send_notification()
else:
open_Outlook()
send_notification()
SMTPLIBを使用して電子メールを送信したかったのですが、それは簡単で、ローカルのセットアップは必要ありません。他の答えが直接役に立たなかった後、これは私がやったことです。
ブラウザでOutlookを開きます。右上隅に移動し、[設定]の歯車アイコンをクリックして、表示されるドロップダウンリストから[オプション]を選択します。 [アカウント]に移動し、[ポップとImap]をクリックします。[デバイスとアプリでポップを使用する]オプションが表示されます。
[はい]オプションを選択し、変更を保存します。
コードは次のとおりです。必要に応じて編集します。最も重要なことは、ここでPOPとサーバーコードを有効にすることです。
import smtplib
body = 'Subject: Subject Here .\nDear ContactName, \n\n' + 'Email\'s BODY text' + '\nYour :: Signature/Innitials'
try:
smtpObj = smtplib.SMTP('smtp-mail.Outlook.com', 587)
except Exception as e:
print(e)
smtpObj = smtplib.SMTP_SSL('smtp-mail.Outlook.com', 465)
#type(smtpObj)
smtpObj.ehlo()
smtpObj.starttls()
smtpObj.login('[email protected]', "password")
smtpObj.sendmail('[email protected]', '[email protected]', body) # Or recipient@Outlook
smtpObj.quit()
pass