python学习——邮件发送程序

这篇博客记录了作者在学习Python过程中,遇到邮件发送程序的挑战。原网上的教程无法运行,主要问题集中在主流邮箱如163、QQ邮箱无法成功登录。经过作者的调整,个人邮箱能成功登录并发送邮件。博客重点探讨如何克服登录障碍以实现邮件发送。
摘要由CSDN通过智能技术生成


本程序留存使用,网上找的教程,不能运行, 自己修改了一下, 主流邮箱不能登录, 比如163,qq

但是自己个人邮箱能够登录,并发送成功

问题关键在于如何能够登录成功, 只要登录成功, 就能够发送成功不管是给 163 qq




#!/usr/bin/env python  
#coding=utf-8  
  
  
from smtplib import *  
from Tkinter import *  
import tkMessageBox  
import string  
  
  
class loginPage(object):  
  
  
    def __init__(self, master, info='Mail Send System'):  
        self.master = master  
        self.mainlabel = Label(master, text=info, justify=CENTER)  
        self.mainlabel.grid(row=0)  
  
  
        self.user = Label(master, text='username', borderwidth=2)  
        self.user.grid(row=1, sticky=W)  
  
  
        self.pwd = Label(master, text='password', borderwidth=2)  
        self.pwd.grid(row=2, sticky=W)  
  
  
        self.userEntry = Entry(master)  
        self.userEntry.grid(row=1, column=1, columnspan=3)  
        self.userEntry.focus_set()  
        #self.userEntry.insert(1,'')
  
  
        self.pwdEntry = Entry(master, show='*')  
        self.pwdEntry.grid(row=2, column=1, columnspan=3)  
  
  
        self.loginButton = Button(master, text='Login', borderwidth=2, command=self.login)  
        self.loginButton.grid(row=3, column=1)  
  
  
        self.clearButton = Button(master, text='Clear', borderwidth=2, command=self.clear)  
        self.clearButton.grid(row=3, column=2)  
  
  
    def login(self):  
        self.username = self.userEntry.get().strip()
        self.passwd = self.pwdEntry.get().strip()  
     
        if len(self.username) == 0 or len(self.passwd) == 0 or '@' not in self.username:  
            tkMessageBox.showwarning('警告', '用户名或者密码为空或邮件格式不正确')  
  
  
            self.clear()  
            self.userEntry.focus_set()  
            return  
  
  
        self.getSmtpHost()  
        self.connect()  
  
  
    def connect(self):  
        'this method will try to connet the SMTP server according the current user'  
        HOST = 'smtp.' + self.smtp +'.com'  
        print   self.smtp
        #HOST = 'mail.' + self.smtp +'.com'  #设置 主机地址, 不同的邮箱可能设置不同
        try:  
            self.mySMTP = SMTP(HOST)  
            self.mySMTP.login(self.username, self.passwd)  
        #except SMTPConnectError:  
        except Exception, e:  
            tkMessageBox.showerror('连接错误', '%s' % e)  
            return  
        self.mySendMail = sendMail(self.master, self.mySMTP, self.username)  
  
  
    def clear(self):  
        self.userEntry.delete(0, END)  
        self.pwdEntry.delete(0, END)  
  
  
    def getSmtpHost(self):  
        'this method try to obtian the SMTP HOST according the user account'  
        firstSplit = self.username.split('@')[1]  
        self.smtp = firstSplit.split('.')[0]  
  
  
  
  
class sendMail(object):  
    'my sendemail class'  
    def __init__(self, master, smtp='', sender=''):  
        self.smtp = smtp  
        self.sender = sender  
  
  
        self.sendPage = Toplevel(master)  
  
  
        self.sendToLabel = Label(self.sendPage, text='send to:')  
        self.sendToLabel.grid()  
        self.sendToEntry = Entry(self.sendPage)  
        self.sendToEntry.grid(row=0, column=1)  
  
  
        self.subjectLabel = Label(self.sendPage, text='subject:')  
        self.subjectLabel.grid(row=1, column=0)  
        self.subjectEntry = Entry(self.sendPage)  
        self.subjectEntry.grid(row=1, column=1)  
  
  
        self.fromToLabel = Label(self.sendPage, text='from to:')  
        self.fromToLabel.grid(row=2, column=0)  
        self.formToAdd = Label(self.sendPage, text=self.sender)  
        self.formToAdd.grid(row=2, column=1)  
  
  
        self.sendText = Text(self.sendPage)  
        self.sendText.grid(row=3, column=0, columnspan=2)  
  
  
        self.sendButton = Button(self.sendPage, text='send', command=self.sendMail)  
        self.sendButton.grid(row=4, column=0)  
  
  
        self.newButton = Button(self.sendPage, text='new mail', command=self.newMail)  
        self.newButton.grid(row=4, column=1)  
  
  
    def getMailInfo(self):  
        self.sendToAdd = self.sendToEntry.get().strip()  
        self.subjectInfo = self.subjectEntry.get().strip()  
        self.sendTextInfo = self.sendText.get(1.0, END)  
  
  
    def sendMail(self):  
        self.getMailInfo()  
        body = string.join(("From: %s" % self.sender, "To: %s" % self.sendToAdd, "Subject: %s" % self.subjectInfo, "", self.sendTextInfo), "\r\n")  
        try:  
            self.smtp.sendmail(self.sender, [self.sendToAdd], body)  
        except Exception, e:  
            tkMessageBox.showerr('发送失败', "%s" % e)  
            return  
        tkMessageBox.showinfo('提示', '邮件已发送成功!')  
  
  
    def newMail(self):  
        self.sendToEntry.delete(0, END)  
        self.subjectEntry.delete(0, END)  
        self.sendText.delete(1.0, END)  
  
  
if __name__ == '__main__':  
    root = Tk()  
    root.title('邮件测试程序')
    myLogin = loginPage(root)  
   
    mainloop()  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值