2016-11-21 7 views
0

Я работаю над проектом создания моей собственной программы Instant-Messaging, даже без графики или чего-то еще, чтобы узнать встроенные модули в python. Здесь я попытался написать код, в который пользователь вводит имя пользователя и пароль, которые пользователь хочет, а затем будет отправлено электронное письмо (пользователю), которое будет содержать 12-символьную случайную строку, а пользователь вернет его обратно в программу. Так или иначе, когда я запускаю код, весь мой компьютер замерзает! Вот код:Отправить письмо с SMTP в Python

import smtplib 
SMTPServer = smtplib.SMTP("smtp.gmail.com",587) 
SMTPServer.starttls() 
SMTPServer.login(USERNAME, PASSWORD)* 

userEmail = raw_input("Please enter your e-mail: ") 
if verifyEmail(userEmail) == False: 
    while True: 
     userEmail = raw_input("Error! Please enter your e-mail: ") 
     if verifyEmail(userEmail) == True: 
      break 

randomString = generateRandomString() 
message = """From: From Person <%s> 
To: To Person <%s> 
Subject: Ido's IM Program Registration 

Your registration code is: %s 
""" %(SERVEREMAIL, userEmail, randomString) 

try: 
    smtpObj = smtplib.SMTP('localhost') 
    smtpObj.sendmail(SERVEREMAIL, userEmail, message) 
    print "Successfully sent email" 
except smtplib.SMTPException: 
    print "Error: unable to send email" 

inputString = raw_input("Input generated code sent: ") 
+0

Вы пытаетесь настроить SMTP-соединение с Gmail, а затем не используйте его для отправки своего сообщения электронной почты. Вместо этого вы создаете новое SMTP-соединение с 'localhost' и используете это. Вы действительно используете почтовый сервер на компьютере, на котором запущен этот сценарий? – kindall

+0

Я, должно быть, неправильно понял, как работает SMTP. Вы хотите просто удалить «smtpObj = smtplib.SMTP (« localhost ») и изменить следующую строку на« SMTPServer.sendmail (SERVEREMAIL, userEmail, message) », потому что Я уже создал сервер, когда писал 'SMTPServer = smtplib.SMTP (« smtp.gmail.com », 587)'? –

+0

Если вы фактически не запускаете SMTP-сервер на том же компьютере, что и скрипт, это звучит как хорошая вещь, чтобы попробовать. – kindall

ответ

0

Это рабочий пример SMTP-клиент. где ваш кодовый блок?

# -*- coding: utf-8 -*- 
import smtplib 
from email.mime.text import MIMEText 


class SMTPClient(object): 
    def __init__(self, recepient, subject, body): 
     self.recepient = recepient 
     self.subject = subject 
     self.body = body 
     self.mail_host = conf.get('smtp_server.host') 
     self.mail_port = conf.get('smtp_server.port') 
     self.username = conf.get('account.username') 
     self.password = conf.get('account.password') 
     self.mail_sender = conf.get('account.from') 
     self._setup() 

    def _setup(self): 
     self.smtp_client = smtplib.SMTP(self.mail_host, self.mail_port) 
     self.smtp_client.ehlo_or_helo_if_needed() 
     self.smtp_client.starttls() 
     self.smtp_client.login(self.username, self.password) 
     self._send_mail() 

    def _make_mail(self): 
     message = MIMEText(self.body, _charset='utf-8') 
     message['From'] = self.mail_sender 
     message['To'] = self.recepient 
     message['Subject'] = self.subject 
     return message.as_string() 

    def send_mail(self): 
     self.smtp_client.sendmail(self.mail_sender, self.recepient, self._make_mail()) 
     self.smtp_client.quit() 
0

Это работает для меня!

import smtplib 
from email.MIMEMultipart import MIMEMultipart 
from email.MIMEBase import MIMEBase 
from email.MIMEText import MIMEText 
from email import Encoders 

gmail_user = 'examp[email protected]' 
gmail_pwd = 'somepassword' 
subject = 'HEY' 
text = 'Some text here' 

msg = MIMEMultipart() 
msg['From'] = gmail_user 
msg['To'] = gmail_user 
msg['Subject'] = subject 

msg.attach(MIMEText(text)) 

part = MIMEBase('application', 'octet-stream') 

Encoders.encode_base64(part) 

mailServer = smtplib.SMTP("smtp.live.com", 587) 
mailServer.ehlo() 
mailServer.starttls() 
mailServer.ehlo() 
mailServer.login(gmail_user, gmail_pwd) 
mailServer.sendmail(gmail_user,gmail_user, msg.as_string()) 
mailServer.close()