2012-10-29 1 views
12

나는 나 자신에 대한 간단한 센드 메일 함수를 작성하고 있는데이 오류가 계속 : 새로운 파이썬, Gmail의 SMTP 오류

나가서 설명하자면 NameError

: 이름 'SMTPException이'내 코드에 문제가 있습니다 무엇

정의되지 않습니다? 어떤 제안?

import smtplib 

sender = "[email protected]" 
receiver = ["[email protected]"] 
message = "Hello!" 

try: 
    session = smptlib.SMTP('smtp.gmail.com',587) 
    session.ehlo() 
    session.starttls() 
    session.ehlo() 
    session.login(sender,'password') 
    session.sendmail(sender,receiver,message) 
    session.quit() 
except SMTPException: 
    print('Error') 

답변

20

파이썬에서, 당신은 완전히 그 모듈을 접두어로 이름을 한정해야합니다 특별히 규정되지 않은 이름을 가져옵니다 (하지만 난 일을 권장하지하지 않는 한

except smtplib.SMTPException: 

마찬가지입니다 가능한 프로그램을 보여주는 프로그램에 대한 것입니다.) :

from smtplib import SMTPException 
+0

아 나는 맞춤법 오류가있었습니다. – eatonphil

+5

SMTP를 사용하여 20 년을 지낸 후에도 걱정하지 않아도됩니다. –

1

나에게 여러 번 잘못 맞춤법이 발생했습니다. 이 "문제"를 우회하는 한 가지 방법은 yagmail입니다.

제쳐두고, 나는 최근 이메일을 보내기 쉽게하기 위해 yagmail을 만들었습니다. 예를 들어

: To가 정의되지 않은 경우 그것은 예를 들어, 여기에 몇 가지 쇼트닝을 사용

import yagmail 
yag = yagmail.SMTP('[email protected]', 'password') 
yag.send(contents = "Hello!") 

, 서버에 등록 된 동일한 이메일로 메일을 보내드립니다. 또한 포트와 호스트가 기본값이므로 매우 간결합니다. 사실

, 당신이 즉시 연결을 닫으려면 보이기 때문에, 당신은이 한 줄을 사용할 수 있습니다

yagmail.SMTP('[email protected]', 'password').send(contents = "Hello!") 

보안을 위해, 당신은 (설명서 참조) 등 keyring에 암호를 유지할 수 있습니다 스크립트에서 개인 비밀번호를 유지할 필요가 없다는 점이 매우 중요합니다! 더 귀중한 화면 공간을 절약 해줍니다. 패키지와 모든-에가는

(@gmail.com이 기본값), 다음과 같은 멀리 얻을 수 있습니다 :

yagmail.SMTP('user').send('', 'Hello!') 

행운을 빕니다.

+1

의견을 남기지 않고 Downvote? – PascalVKooten

+2

yagmail을 사용하여 u에게 upvote를 보냈습니다! – sureshvv

+0

@sureshvv 감사합니다 :) 희망을 잘 부탁드립니다. – PascalVKooten