2010-06-17 3 views
5

기본 설치된 메일 클라이언트를 사용하여 사용자 목록에 전자 메일을 보내려면 Python 함수를 작성하려고합니다. 전자 메일 클라이언트를 열어 사용자에게 전자 메일 본문 또는 사용자 목록을 편집 할 기회를 제공하려고합니다. Python - 여러 수신자가있는 mailto를 사용하는 기본 메일 클라이언트 열기

좀 검색을했고, 여기에 따라 :

http://www.sightspecific.com/~mosh/WWW_FAQ/multrec.html

그것은 이메일 링크에서 다수의 쉼표로 구분 된받는 사람을 넣어 RFC 사양에 대해 분명히 있습니다. 그러나 다른 모든 사람들이 그렇게하는 것처럼 보입니다. 이것에 대한 현대 입장은 정확히 무엇입니까?

어쨌든, 나는 다음과 같은 두 사이트 발견 :

urllib.parse (나를 위해 url.parse.quote)를 사용하여 솔루션을 제시하는 것, 그리고 webbrowser.open.

첫 번째 링크 (2ality.blogspot.com)에서 샘플 코드를 시도했는데 정상적으로 작동하고 기본 메일 클라이언트가 열렸습니다. 그러나, 내 자신의 모듈에서 코드를 사용하려고하면 일부 기본 이상한 이유로 내 기본 브라우저가 열리는 것 같습니다. 검색 주소창에 재미있는 텍스트가 없으므로 브라우저를 열면됩니다.

email_incorrect_phone_numbers() 함수는 Employee 클래스에 있으며, Employee 클래스에는 직원 속성 (sn, givenName, mail 등)이있는 Employee 객체의 사전 (employee_dict)이 들어 있습니다. 전체 코드는 여기에 실제로 (Python - Converting CSV to Objects - Code Design)

from urllib.parse import quote 
import webbrowser 

.... 

    def email_incorrect_phone_numbers(self): 
     email_list = [] 
     for employee in self.employee_dict.values(): 
      if not PhoneNumberFormats.standard_format.search(employee.telephoneNumber): 
       print(employee.telephoneNumber, employee.sn, employee.givenName, employee.mail) 
       email_list.append(employee.mail) 
     recipients = ', '.join(email_list) 
     webbrowser.open("mailto:%s?subject=%s&body=%s" % 
        (recipients, quote("testing"), quote('testing')) 
        ) 

어떤 제안입니까?

건배, 빅터

답변

3

글쎄, 이후 당신은 제안 요청하십시오 mailto: 방식과 webbrowser 잊어, 파이썬의 smtplib 모듈을 사용하여 작은 SMTP 클라이언트를 작성합니다. 표준이며, 모든 시스템에서 완벽하게 지원됩니다. 실제로 문서를 복사하여 붙여 넣기 할 수있는 문서에 포함 된 예제가 있습니다.

물론 smtplib을 사용하는 경우 사용자에게 사용할 SMTP 서버 (호스트 이름 및 포트, 로그인/비밀번호)에 대한 세부 정보를 묻는 것이 좋습니다. 그건 틀림없이 불편하므로, 전자 메일을 처리하기 위해 시스템의 기존 프로그램에 위임 할 이유가 무엇인지 알 수 있습니다. 문제는 시스템 독립적 인 방법이 없다는 것입니다. webbrowser 모듈조차도 모든 곳에서 작동하지 않습니다. 어떤 사람들은 모듈이 기본 (또는 어떤) 브라우저를 감지 할 수없는 시스템을 사용하며 심지어 가능하다면 mailto: 링크를 제공 할 때 일어나는 일은 전적으로 브라우저의 책임입니다.

SMTP를 사용하고 싶지 않거나 사용하지 않으려면 최대한 많은 시스템에서 기본 전자 메일 클라이언트를 검색하고 열 수있는 사용자 정의 모듈을 작성하는 것이 좋습니다. webbrowser 모듈은 브라우저 대신 전자 메일 클라이언트를 제외하고는 수행합니다. 이 경우 사용자가 어떤 유형의 메일 클라이언트를 설치했는지 식별하고 지원하는지 확인해야합니다.만약 당신이 충분히 철저하다면 PyPI (파이썬 패키지 색인)에 모듈을 게시하고 파이썬 표준 라이브러리의 차후 버전에 포함시킬 수도있을 것이다. - 나는 그와 같은 것을 좋아할 사람들이 많이있을 것이라고 확신한다. 그.

+0

+1, 나는 두 번째 동작입니다. –

+0

흠, 그래, mailto 꽤 깨진 것 같습니다. 유일한 문제는 원하는 경우 사용자가 mailto 목록, 제목 및 본문을 편집 할 수있게하려는 것입니다. 미리 채워진 것들로 이메일 클라이언트를 여는 것이 좋은 방법입니다. 또한 이것은 상당히 동질적인 기업 환경이므로 사용자가 어떤 이메일 클라이언트를 사용하는지, 그리고 환경이 어떻게 설정되는지 알 수 있습니다. 그것과 그것은 정말로 한 사용자에 의해서만 실행되는 유틸리티입니다 (적어도 지금은). – victorhooi

+0

둘째, smtplib은 엔터프라이즈 환경이므로 실제로 옵션이 아닙니다. 이 유틸리티는 사용자의 데스크톱에서 실행되는 작은 유틸리티이며 액세스 할 수있는 내부 SMTP 서버가 없기 때문에 기업 프록시/방화벽 때문에 외부 서버에 펀치 아웃 할 수 없습니다. 어느 한 쪽). SMTP 서버를 사용하지 않고도이 작업을 수행 할 수 있습니까? 마지막 옵션은 흥미로워 보이며이를 달성하는 방법을 모르겠습니다. – victorhooi

0

다음 줄에는 쉼표 다음에 공백이 없어야합니다.

recipients = ', '.join(email_list) 

Outlook에는 쉼표가 아닌 세미콜론이 필요합니다. 그 외에는 mailto가 절 슬퍼하지 않았습니다.

일반적인 팁은 먼저 브라우저에서 mailto URL을 수동으로 테스트하고 URL을 인쇄하여 수동으로 입력하여 디버깅하는 것입니다.

1

파이썬의 경우처럼 누군가가 이미 대부분의 노력을 기울였습니다. this recipe을 확인하십시오.

관련 문제