2011-06-13 6 views
26

Outlook 2003을 사용하고 있습니다.Python을 통해 Outlook Email 보내기?

Python을 사용하여 이메일 (Outlook 2003 통해)을 보내는 가장 좋은 방법은 무엇입니까?

+1

왜 아웃룩을 통해 메일을 보내시겠습니까? – ThiefMaster

+1

@ThiefMaster : 내 'smtp'서버가 내 이메일과 다릅니다. 따라서 다른 이메일 주소를 사용하고 있어도 인터넷 제공자 ('att')를 통해 내 smtp를' att's') 이메일을 보냅니다. 'Outlook'은 이미 이것을 처리하도록 구성되었습니다.이것도 지원할 다른 솔루션 ('Outlook' 기반이 아닌)이 있다면, 제안을 듣게되어 기쁩니다. – user3262424

+0

올바른 해결책은 python의 [smtplib] (http://docs.python.org/library/smtplib.html#smtp-example) – ThiefMaster

답변

10

사용 파이썬과 함께 제공되는 smtplib. 이메일 계정에 smtp가 허용되어야합니다. smtp는 기본적으로 활성화되어있는 것은 아닙니다.

SERVER = "your.mail.server" 
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() 

편집 :이 예는 실제로 작동하려면, 씨 미상 Gmail에서 옵션 탭으로 이동하여 설정해야합니다 다른 구글 메일

SERVER = "smtp.google.com" 
FROM = "[email protected]" 
TO = ["[email protected]"] # must be a list 

SUBJECT = "Hello!" 
TEXT = "This is a test of emailing through smtp in google." 

# 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() 

에 가상의 구글 메일을 사용 그것은 smtp 연결을 허용합니다. 원격 서버에 인증하기위한 로그인 줄 추가에 유의하십시오. 원래 버전에는이 부분이 포함되지 않았으므로 내 부분에 대한 감독입니다. pywin32를 사용

+7

이것은 질문이 아닙니다. 질문은 Outlook을 제어하기 위해 Win32 API를 사용하는 것에 관한 것입니다. –

+0

@Spencer Rathbun : 감사합니다. 문제는 이것입니다 : 내 'smtp'서버가 내 이메일과 같지 않습니다. 따라서 다른 이메일 주소를 사용하고 있어도 인터넷 제공자 ('att')를 통해 내 smtp를'채널 화 '해야합니다. 'att's') 이메일을 보냅니다. 'Outlook'은 이미 이것을 처리하도록 구성되었습니다. 이것도 지원할 다른 솔루션 ('Outlook' 기반이 아닌)이 있다면, 제안을 듣게되어 기쁩니다. – user3262424

+0

@ user3262424 이메일 주소가 SMTP 서버와 다른가요? 그것은 smtp 서버에서 처리되어야합니다. 적절한 전자 메일 서버에서 시작되지 않은 전자 메일을 전달하도록 설정해야합니다. 잘못 설정하면 스팸 발송자가 귀하를 둘러 볼 수 있습니다. 그러나 아마 당신은 관련된 IP 주소를 알고 허용 목록에 설정할 수 있습니다. –

23

Google을 통해 확인하십시오. 많은 예제가 있습니다. 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() 
+0

감사합니다. 좋습니다. 문제는 Outlook이 계속해서 또는 대안으로 액세스 스크립트를 종료하고 싶은지 묻는 경고 메시지를 생성하는 것입니다. 이 '경고 메시지'를 건너 뛸 수있는 방법이 있습니까? – user3262424

+0

@ user3262424 - 팝업의 정확한 내용은 무엇입니까? –

+0

나는 그 컴퓨터 옆에 지금 있지 않다. 스크립트가'outlook'에 액세스하려고 시도하고 있으며 바이러스 등이 될 수도 있고 계속하고 싶다고 알리는 것. – user3262424

5

:

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() 
+0

감사합니다. 이것이 성가신'outlook' 오류 메시지를 생성하지 않을까요? – user3262424

+1

새 버전의 Windows에서 유효성 검사가 트리거 될 수 있습니다. 당신이 그것을 어떻게 억제 할 지 확신하지 못합니다. 나는 창문을 더 이상 움직이지 않는다. –

45
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() 

보내 해당 지역의 전망 계정을 사용합니다.

참고 위에서 언급하지 않은 작업을 수행하려는 경우 COM 문서 속성/방법을 확인하십시오 (https://msdn.microsoft.com/en-us/vba/outlook-vba/articles/mailitem-object-outlook). 위의 코드에서 mail은 MailItem 개체입니다.

+0

html 본문으로 변환 할 수 있습니까?사진이있는 이메일 본문처럼 –

+2

답변이 업데이트되었습니다. mail.HTMLBody는 html의 문자열로 설정할 수 있습니다 – TheoretiCAL

+2

간단하고 똑바로 대답! 파이썬 3.6.1에서 올바르게 작동. –

0

SMTPLIB를 사용하여 전자 메일을 보내고 싶었습니다. SMTPLIB를 사용하면 전자 메일을보다 쉽게 ​​보낼 수 있었으며 로컬 설치가 필요하지 않았습니다. 다른 대답이 직접적으로 도움이되지 않으면, 이것은 내가 한 행동입니다.

브라우저에서 Outlook을 엽니 다. 오른쪽 상단으로 이동하여 설정의 톱니 바퀴 아이콘을 클릭하고 나타나는 드롭 다운 목록에서 '옵션'을 선택합니다. '계정'으로 이동하여 '팝업 및 이미지 만들기'를 클릭하십시오. '장치 및 앱에서 팝업 사용 허용'옵션이 표시됩니다.

예 옵션을 선택하고 변경 사항 저장을 선택하십시오.

여기에 코드가 있습니다. 필요한 부분을 편집하십시오. 가장 중요한 것은 여기서 POP와 서버 코드를 사용하도록 설정하는 것입니다. 당신의 회사가 당신의 웹 전망을 설정 한 경우는 Win32 이외의

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 [email protected] 

smtpObj.quit() 
pass 
0

하나는 내가는 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() 
관련 문제