2012-10-29 53 views
12

Tôi viết một hàm sendmail đơn giản để bản thân mình và tôi tiếp tục nhận được lỗi này:mới để Python, GMail SMTP lỗi

NameError: Tên 'SMTPException' không được định nghĩa

Điều gì là sai với mã của tôi? Bất kỳ đề xuất?

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') 

Trả lời

20

Trong Python, bạn sẽ cần phải hội đủ điều kiện đầy đủ tên bằng cách đặt trước nó với mô-đun của nó:

except smtplib.SMTPException: 

Điều này đúng trừ khi bạn nhập tên không đủ tiêu chuẩn (nhưng tôi sẽ không khuyên bạn nên làm điều này cho chương trình của bạn, chỉ hiển thị những gì có thể):

from smtplib import SMTPException 
+0

Ah Tôi đã gặp lỗi chính tả. – eatonphil

+5

Đừng lo lắng, ngay cả sau 20 năm làm việc với SMTP, tôi vẫn làm điều đó. –

1

Lỗi chính tả đó cũng xảy ra nhiều lần với tôi! Một cách để phá vỡ "vấn đề" này, là sử dụng yagmail.

Truyện cười sang một bên, gần đây tôi đã tạo yagmail để giúp gửi email dễ dàng hơn.

Ví dụ:

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

Nó sử dụng nhiều mỡ ở đây, ví dụ như khi To không được định nghĩa, nó sẽ gửi một mail đến cùng một email đã đăng ký trên máy chủ. Ngoài ra các cổng và máy chủ là mặc định, mà làm cho nó rất súc tích.

Trong thực tế, kể từ khi có vẻ như bạn muốn đóng kết nối ngay lập tức, thậm chí bạn có thể sử dụng một lớp lót:

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

Để bảo mật, bạn có thể giữ mật khẩu của bạn trong keyring (xem tài liệu) như vậy rằng bạn không cần phải giữ mật khẩu cá nhân của mình trong tập lệnh, rất quan trọng! Nó thậm chí sẽ giúp bạn tiết kiệm nhiều màn hình quý giá hơn.

Đi all-in với các gói (@gmail.com là mặc định), bạn có thể nhận được ngay với những điều sau đây:

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

Chúc may mắn.

+1

Downvote mà không để lại một bình luận? – PascalVKooten

+2

Tôi đã sử dụng yagmail và tặng cho bạn một upvote! – sureshvv

+0

@sureshvv Cảm ơn :) Hy vọng nó phục vụ bạn tốt. – PascalVKooten

Các vấn đề liên quan