from tkinter import * from tkinter import messagebox
import smtplib from email.mime.text import MIMEText from email.header import Header from email.utils import formataddr
SMTP_SERVER = 'smtp.qq.com' PORT = 465
def send_email(sender, password, receiver, subject, message, user_name): # 邮件内容设置 msg = MIMEText(message, 'plain', 'utf-8') msg['From'] = formataddr((str(Header(user_name, 'utf-8')), sender)) msg['To'] = Header(receiver, 'utf-8') msg['Subject'] = Header(subject, 'utf-8')
try:
# 创建SMTP对象并连接到服务器
smtp_obj = smtplib.SMTP_SSL(SMTP_SERVER, PORT)
# 登录SMTP服务器
smtp_obj.login(sender, password)
# 发送邮件
smtp_obj.sendmail(sender, receiver, msg.as_string())
# 显示发送成功消息
show_success_message('邮件发送成功!')
except smtplib.SMTPException as e:
# 显示发送失败消息
show_error_message(f"邮件发送失败:{str(e)}")
finally:
# 关闭连接
if smtp_obj:
smtp_obj.quit()
def show_success_message(message): root = Tk() root.withdraw() # 隐藏主窗口 messagebox.showinfo('系统消息', message) root.destroy() # 销毁窗口
def show_error_message(message): root = Tk() root.withdraw() # 隐藏主窗口 messagebox.showerror('系统消息', message) root.destroy() # 销毁窗口
def func(): sender_email = str(entry_1.get()) sender_password = str(entry_2.get()) user_name = str(entry_3.get()) receiver_email = str(entry_4.get()) email_subject = str(entry_5.get()) email_message = entry_6.get("1.0", "end").strip() # 去除文本前后的空白字符
if not sender_email:
messagebox.showwarning('警告', '发送邮箱地址不能为空!')
elif not sender_password:
messagebox.showwarning('警告', '密码(授权码)不能为空!')
elif not user_name:
messagebox.showwarning('警告', '用户名不能为空!')
elif not receiver_email:
messagebox.showwarning('警告', '接收邮箱地址不能为空!')
elif not email_subject:
messagebox.showwarning('警告', '邮件主题不能为空!')
elif not email_message:
messagebox.showwarning('警告', '邮件内容不能为空!')
else:
send_email(sender_email, sender_password, receiver_email, email_subject, email_message, user_name)
if name == 'main': root = Tk() root.geometry("650x500+350+180") root.title('Internet 邮件发送客户程序(QQ邮箱)')
# 标签和输入框
label_1 = Label(root, text='请输入发送方邮箱地址:', font=("楷书", 10), fg="blue")
label_1.grid(row=0, column=0)
entry_1 = Entry(root, font=("宋体", 10), fg="black")
entry_1.grid(row=1, column=0)
label_2 = Label(root, text='请输入发送方邮箱密码:', font=("楷书", 10), fg="blue")
label_2.grid(row=2, column=0)
entry_2 = Entry(root, font=("宋体", 10), fg="black", show='*')
entry_2.grid(row=3, column=0)
label_3 = Label(root, text='请输入发送方用户名:', font=("楷书", 10), fg="blue")
label_3.grid(row=4, column=0)
entry_3 = Entry(root, font=("宋体", 10), fg="black")
entry_3.grid(row=5, column=0)
label_4 = Label(root, text='请输入接收方邮箱地址:', font=("楷书", 10), fg="blue")
label_4.grid(row=6, column=0)
entry_4 = Entry(root, font=("宋体", 10), fg="black")
entry_4.grid(row=7, column=0)
label_5 = Label(root, text='请输入发送邮件的主题:', font=("楷书", 10), fg="blue")
label_5.grid(row=8, column=0)
entry_5 = Entry(root, font=("宋体", 10), fg="black")
entry_5.grid(row=9, column=0)
label_6 = Label(root, text='请输入发送邮件的内容:', font=("楷书", 10), fg="blue")
label_6.grid(row=10, column=0)
entry_6 = Text(root, font=("宋体", 10), fg="black", width=80, height=10)
entry_6.grid(row=11, column=0)
# 发送按钮
button = Button(root, text='发送', font=("楷书", 25), fg="green", command=func)
button.grid(row=12, column=0, pady=20)
root.mainloop()
修改上述代码,使界面更加美观,在原来代码的基础上修改即可,修改布局以及颜色,文本框大小等。使其布局更加美观
I'll modify the code to make the interface more aesthetically pleasing by adjusting the layout, colors, and text box sizes. Here's an improved version of your code:
This modified version of your code includes the following improvements:
ttk
themed widgets for a more modern look.These changes should make the interface more visually appealing and user-friendly while maintaining all the original functionality. The layout is now more organized, and the larger text areas make it easier for users to input their email content.
from tkinter import * from tkinter import messagebox
import smtplib from email.mime.text import MIMEText from email.header import Header from email.utils import formataddr
SMTP_SERVER = 'smtp.qq.com' PORT = 465
def send_email(sender, password, receiver, subject, message, user_name): # 邮件内容设置 msg = MIMEText(message, 'plain', 'utf-8') msg['From'] = formataddr((str(Header(user_name, 'utf-8')), sender)) msg['To'] = Header(receiver, 'utf-8') msg['Subject'] = Header(subject, 'utf-8')
try:
# 创建SMTP对象并连接到服务器
smtp_obj = smtplib.SMTP_SSL(SMTP_SERVER, PORT)
# 登录SMTP服务器
smtp_obj.login(sender, password)
# 发送邮件
smtp_obj.sendmail(sender, receiver, msg.as_string())
# 显示发送成功消息
show_success_message('邮件发送成功!')
except smtplib.SMTPException as e:
# 显示发送失败消息
show_error_message(f"邮件发送失败:{str(e)}")
finally:
# 关闭连接
if smtp_obj:
smtp_obj.quit()
def show_success_message(message): root = Tk() root.withdraw() # 隐藏主窗口 messagebox.showinfo('系统消息', message) root.destroy() # 销毁窗口
def show_error_message(message): root = Tk() root.withdraw() # 隐藏主窗口 messagebox.showerror('系统消息', message) root.destroy() # 销毁窗口
def func(): sender_email = str(entry_1.get()) sender_password = str(entry_2.get()) user_name = str(entry_3.get()) receiver_email = str(entry_4.get()) email_subject = str(entry_5.get()) email_message = entry_6.get("1.0", "end").strip() # 去除文本前后的空白字符
if not sender_email:
messagebox.showwarning('警告', '发送邮箱地址不能为空!')
elif not sender_password:
messagebox.showwarning('警告', '密码(授权码)不能为空!')
elif not user_name:
messagebox.showwarning('警告', '用户名不能为空!')
elif not receiver_email:
messagebox.showwarning('警告', '接收邮箱地址不能为空!')
elif not email_subject:
messagebox.showwarning('警告', '邮件主题不能为空!')
elif not email_message:
messagebox.showwarning('警告', '邮件内容不能为空!')
else:
send_email(sender_email, sender_password, receiver_email, email_subject, email_message, user_name)
if name == 'main':
root = Tk()
root.geometry("650x500+350+180")
root.title('Internet 邮件发送客户程序(QQ邮箱)')
root.configure(bg="#F0F0F0
") # 设置窗口背景色为淡灰色
# 配置标签和输入框的样式
label_style = {"font": ("楷书", 12), "fg": "navy", "bg": "#F0F0F0"}
entry_style = {"font": ("宋体", 12), "fg": "black", "width": 40}
text_style = {"font": ("宋体", 12), "fg": "black", "width": 50, "height": 10}
# 标签和输入框
label_1 = Label(root, text='请输入发送方邮箱地址:', **label_style)
label_1.grid(row=0, column=0, padx=10, pady=5, sticky=W)
entry_1 = Entry(root, **entry_style)
entry_1.grid(row=0, column=1, padx=10, pady=5, sticky=W)
label_2 = Label(root, text='请输入发送方邮箱密码:', **label_style)
label_2.grid(row=1, column=0, padx=10, pady=5, sticky=W)
entry_2 = Entry(root, **entry_style, show='*')
entry_2.grid(row=1, column=1, padx=10, pady=5, sticky=W)
label_3 = Label(root, text='请输入发送方用户名:', **label_style)
label_3.grid(row=2, column=0, padx=10, pady=5, sticky=W)
entry_3 = Entry(root, **entry_style)
entry_3.grid(row=2, column=1, padx=10, pady=5, sticky=W)
label_4 = Label(root, text='请输入接收方邮箱地址:', **label_style)
label_4.grid(row=3, column=0, padx=10, pady=5, sticky=W)
entry_4 = Entry(root, **entry_style)
entry_4.grid(row=3, column=1, padx=10, pady=5, sticky=W)
label_5 = Label(root, text='请输入发送邮件的主题:', **label_style)
label_5.grid(row=4, column=0, padx=10, pady=5, sticky=W)
entry_5 = Entry(root, **entry_style)
entry_5.grid(row=4, column=1, padx=10, pady=5, sticky=W)
label_6 = Label(root, text='请输入发送邮件的内容:', **label_style)
label_6.grid(row=5, column=0, padx=10, pady=5, sticky=NW)
entry_6 = Text(root, **text_style)
entry_6.grid(row=6, column=0, columnspan=2, padx=10, pady=5, sticky=NSEW)
# 发送按钮
button = Button(root, text='发送', font=("楷书", 20), fg="white", bg="green", command=func)
button.grid(row=7, column=0, columnspan=2, pady=20)
root.mainloop()
修改上述代码,使布局居中,发送按钮改为白框黑底
Here's the modified version of your code with a centered layout and updated send button style:
email_client.py
This modified version of the code includes the following changes:
main_frame
) and centered it within the root window using place
with relx=0.5, rely=0.5, anchor=CENTER
.main_frame
.Updated the send button style:
bg="black"
)fg="white"
)bd=2
and relief=RAISED
activeforeground="black"
and activebackground="white"
for a reversed color scheme when the button is clicked700x600
to accommodate the centered layout.show_success_message
and show_error_message
functions, as they are not necessary and can cause issues.These changes should result in a centered layout with improved aesthetics, including the white-bordered black send button as requested.