2014-06-12 17 views
3

pywin32를 통해 Outlook 전자 메일을 만들고 보내는 작업 스크립트가 있지만 다른 일반 계정에서 전자 메일을 보내고 싶습니다. 이 일반 계정 (및 암호)에 액세스 할 수 있으며 Outlook에서 사서함을 동시에 열어 두어도 도움이됩니다.Python - pywin32를 사용하여 다른 주소에서 Outlook 전자 메일 보내기

msg.From = "[email protected]"과 같은 시도는 AttributeError: Property 'CreateItem.From' can not be set.을 반환합니다.

SMTP를 사용하지 않고이를 수행 할 수있는 방법이 있습니까? 보낸 사람 및 회신 주소로 일반 계정을 반영하도록 머리글을 변경하는 것만으로도 작동합니다.

편집 : 사용 Win7에 32 비트, 아웃룩 2010, 파이썬 2.7 및 pywin32 모듈은 다음과 같은 코드를 만들 수 있습니다 :

이 부분은 완벽하게 잘 작동하지만 그것의 사용자를 통해 이메일을 전송

from win32com.client import Dispatch 
mailer = Dispatch("Outlook.Application") 
msg = mailer.CreateItem(0) 
msg.To = emailTo 
msg.CC = emailCC 
msg.Subject = emailSubject 
msg.Body = emailBody 
msg.Send() 
로그인했습니다. 차라리 일반 계정에서 보내서 공식적인 것으로 보이고 대신 내 사서함에 응답을 보냅니다.

+0

안녕하세요. @Yann, 나는 더 많은 정보와 내가 사용한 코드 샘플을 포함하도록 원래의 의견을 편집했습니다. 루프에서 문자열 varial을 사용하여 무엇을 제안하는지 확실하지 않습니다. 내 문제는 내가 보낸 사람 주소를 전혀 변경할 수 없다는 것입니다. – caseodilla

+0

대신 내부 파이썬 전자 메일 라이브러리를 사용합니다. 전자 메일을 보내려는 경우 완벽하게 작동합니다. – Jonathan

+0

@Jonathan 의견을 넓힐 수 있습니까? – caseodilla

답변

1

확장 맵을 사용하여 교환기를 통해 메일을 보낼 수 있습니다. 지금까지 시도한 것보다 약간의 노력이 필요하지만 매우 강력합니다. 사용될 전망 프로파일을 선택할 수 있습니다. pywin32 설치의 site-packages \ win32comext \ mapi \ demos \ mapisend.py를 살펴보십시오.

는 편집 :

으로는 주석에서 Outlook을 원하는 프로필을 사용되었는지 확인하려면 다음을 시도했다.

session = mapi.MAPILogonEx(0, MAPIProfile, None, mapi.MAPI_EXTENDED | 
          mapi.MAPI_USE_DEFAULT) 

과 같은

session = mapi.MAPILogonEx(0, MAPIProfile, None, mapi.MAPI_EXTENDED | 
          mapi.MAPI_LOGON_UI) 

전화 SendEMAPIMail로 변경 :이 줄을 찾습니다

SendEMAPIMail(SendSubject, SendMessage, SendTo, MAPIProfile=None) 

대화 상자가 Outlook 프로필을 선택하기 위해 제공 나타납니다.

편집 : @caseodilla이 발견으로 Outlook을 다른 프로파일로 실행중인 경우

, MAPILogonEx은 실행중인 세션과 프로필을 재사용 할 것으로 보인다. MAPI가 다른 프로필을 사용하도록하려면 MAPI_NEW_SESSION 플래그를 추가하십시오.

session = mapi.MAPILogonEx(0, MAPIProfile, None, mapi.MAPI_EXTENDED | 
          mapi.MAPI_LOGON_UI | mapi.MAPI_NEW_SESSION) 
+0

의견을 보내 주셔서 감사합니다. @Christian K. – caseodilla

+0

저는 확장 MAPI를 조금 헷갈 렸습니다. 나도 메일을 보내는 프로필을 선택할 수 있었지만 아직 내 사용자 프로필 주소에서 보내는 것이 끝납니다. 내가 누락 된 부분을보기 위해 링크 된 정보를 더 읽게 될 것입니다. – caseodilla

+0

나는 마지막 CDO를 Outlook 2010 환경에 강제 설치했습니다. – caseodilla