好友
阅读权限10
听众
最后登录1970-1-1
|
最近这几天自己有点偷懒了,学习进度慢了一些,不过还好,基础语法算是学完了,也基本掌握了七七八八,具体操作能力如何无法确定。
值得欣慰的是自己喜欢的一件事情坚持了下来。先给自己一些鼓励~~ 还在学习的童鞋请加油~你是最棒的
为什么没有每天来发一下自己学习的内容呢, 主要因为学习的一些地方比较简洁,也没有可以操作的练习题,所以就继续往下学习了~
那么第十三天到十七天,四天时间,我这边学习了以下内容:
encode()编码与decode()解码
读取文本内容与写入文本内容
利用with方法如何操作
学习了如何调用py文件,包含(import语句,from.....improt......语句,if__name__=='__main__'语句)
最后学习了调用csv文件读取与写入,方法跟读取文本相似。
先说一下从最开始学习到现在为止的一个感想,说白了,我自己学习这个只是出于到写代码的爱好,它到底能在工作或技能上帮助自己多少,能做哪些东西,其实我也不是很清楚。
我相信很多人都学着学着就放弃了,有着各种原因。但是该坚持的总要去坚持一下,或许能给到一个不一样的自己。
学了半个多月,自己掌握了多少不重要,重要的是在你做一个项目或练习题时,你可以知道翻你的哪些笔记,度娘什么问题就好。
python其实不算很难,有点像中文一样,把每个项目拆的散一些,根据逻辑一步一步实现就好了。如同作文似的。
或许在后面的爬虫,数据分析,web开发更复杂,但是先学了再说嘛。
废话不多说,总要拿出一点学习记录来,接下来是手动写一个收发邮件功能程序。也希望给在学的一些启发,大佬给予一些建议~~
使用Python发送邮件, 需要使用smtplib与email两个模块啊。
也就是说email模块负责构造邮件;smtplib模块负责发送邮件,这就是这节课要使用的模块解决的问题。SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。首先, 我们来构造一个简单的邮件。[Python] 纯文本查看 复制代码 1 2 3 | from email.mime.text import MIMEText
import smtplib
msg = MIMEText( 'hello, Python auto send email' , 'plain' , 'utf-8' )
|
在这里, 我们把email模块与smtplib模块引入进来,我们还使用MIMEText构造了邮件内容。
现在有了邮件的正文, 但是还缺少, 发件人,收件人; 接下来,我们向用户收集信息。[Python] 纯文本查看 复制代码 1 2 3 4 5 6 7 | from_addr = input ( 'From: ' )
password = input ( 'Password: ' )
smtp_server = input ( 'SMTP server: ' )
to_addr = input ( 'To: ' )
|
在这里, 我们需要拿到, 发件人的邮箱,邮箱的密码, SMTP服务器地址, 还有收件人的邮箱。
那么这个STMP服务器地址什么意思
SMTP服务器地址,实际上就是代收发服务器地址,是由邮箱服务商提供的。说白了,你用哪家公司的邮箱, 就是哪家公司收发邮件服务器的地址。
我们编写的程序以QQ邮箱来测试. 我们使用QQ邮箱的收发邮件服务器的地址。
QQ邮箱SMTP服务器地址:smtp.qq.com, 端口465, QQ邮箱默认的端口是25, 我们这里使用的是加密端口465。[Python] 纯文本查看 复制代码 1 2 | server = smtplib.SMTP_SSL(smtp_server, 465 )
server.set_debuglevel( 1 )
|
用set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。
好了,接下来我们就要想着发送邮件了, 完成SMTP发送邮件功能server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())login()方法用来登录SMTP服务器,参数有两个, from_addr是用户输入的发件邮箱, password是发件邮箱的密码。
sendmail()方法就是发邮件,需要引入三个参数:
第一个参数:from_addr是发件人的邮箱地址
第二个参数:[to_addr] 是收件人的邮箱地址, 是列表形式。因为邮件可能一次发给多个人,使用列表,如果发送多个人,就写多个邮箱,中间使用逗号隔开。
第三个参数:msg.as_string()把邮件内容MIMEText对象变成str。
好了,接下来我们整合所有代码.如下:[Python] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 | from email.mime.text import MIMEText
import smtplib
msg = MIMEText( 'hello, Python auto send email' , 'plain' , 'utf-8' )
from_addr = input ( '请输入发件人的邮箱号码From: ' )
password = input ( '请输入发件人的邮箱密码Password: ' )
smtp_server = input ( '请输入邮箱服务器地址SMTP server: ' )
to_addr = input ( '请输入收件人邮箱地址To: ' )
import smtplib
server = smtplib.SMTP_SSL(smtp_server, 465 )
server.set_debuglevel( 1 )
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
|
server.quit()语句,是邮件发送结束后,停止服务的意思.好了,基本的版本算是完成了,那么现在还存在如下两个问题: 1.邮件没有主题; 2.收件人的名字没有显示为友好的名字,比如Mr Green ;这是因为邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,而是包含在发给MTA的文本中的,
所以,我们必须把From、To和Subject添加到MIMEText中,才是一封完整的邮件:[Python] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr(( Header(name, 'utf-8' ).encode(), addr))
from_addr = input ( '请输入发件人的邮箱号码From: ' )
password = input ( '请输入发件人的邮箱密码Password: ' )
smtp_server = input ( '请输入邮箱服务器地址SMTP server: ' )
to_addr = input ( '请输入收件人邮箱地址To: ' )
msg = MIMEText( 'hi,你好吗,我的朋友' , 'plain' , 'utf-8' )
msg[ 'From' ] = _format_addr(u '努力吧 <%s>' % from_addr)
msg[ 'To' ] = _format_addr(u '管理员 <%s>' % to_addr)
msg[ 'Subject' ] = Header(u '来自Hz的问候……' , 'utf-8' ).encode()
server = smtplib.SMTP_SSL(smtp_server, 465 )
server.set_debuglevel( 1 )
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
|
分析整个代码:
先看引入的模块文件[Python] 纯文本查看 复制代码 1 2 3 4 5 | from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
|
这次引入的模块文件有点多,增加了四个模块。
1、encoders模块负责编码
2、Header模块负责处理邮件头
3、MIMEText模块负责处理文本
4、parseaddr模块与formataddr模块 负责将输入的内容格式化[Python] 纯文本查看 复制代码 1 2 3 4 5 6 7 8 9 | def _format_addr(s):
name, addr = parseaddr(s)
return formataddr(( Header(name, 'utf-8' ).encode(), addr))
msg = MIMEText( 'hi,[/backcolor]你好吗,我的朋友' , 'plain' , 'utf-8' )
[backcolor = white]msg[ 'From' ] = _format_addr(u '[/backcolor]努力吧 <%s>' % from_addr)
[backcolor = white]msg[ 'To' ] = _format_addr(u '管理员 <%s>' % to_addr)
msg[ 'Subject' ] = Header(u '来自Hz的问候……' , 'utf-8' ).encode()
|
我们将发送邮箱、接收邮箱、邮件主题格式化完毕。
好了,接下来运行一下代码[Python] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr(( Header(name, 'utf-8' ).encode(), addr))
from_addr = input ( '请输入发件人的邮箱号码From: ' )
password = input ( '请输入发件人的邮箱密码Password: ' )
smtp_server = input ( '请输入邮箱服务器地址SMTP server: ' )
to_addr = input ( '请输入收件人邮箱地址To: ' )
msg = MIMEText( 'hi,你好吗,我的朋友' , 'plain' , 'utf-8' )
msg[ 'From' ] = _format_addr(u '努力吧 <%s>' % from_addr)
msg[ 'To' ] = _format_addr(u '管理员 <%s>' % to_addr)
msg[ 'Subject' ] = Header(u '来自Hz的问候……' , 'utf-8' ).encode()
server = smtplib.SMTP_SSL(smtp_server, 465 )
server.set_debuglevel( 1 )
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
|
邮件主题、发件人、内容是不是都有, 比之前规范多了。
但是,还有个小问题。
现在,我们的内容有点少,能不能多写点内容。
可以啊。 下面,我们将邮件内容丰富起来。
我们使用字符串增加邮件内容,使用三引号的字符串,就可以原样显示字符串内容。[Python] 纯文本查看 复制代码 1 2 3 4 5 6 7 8 | content =
msg = MIMEText(content, 'plain' , 'utf-8' )
|
使用三引号字符串,将邮件内所有内容放入content变量中;将msg中的内容,换成content变量;将msg中的内容,换成content变量。
最终完整代码[Python] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr(( Header(name, 'utf-8' ).encode(), addr))
try :
from_addr = input ( '请输入发件人的邮箱号码From: ' )
password = input ( '请输入发件人的邮箱密码Password: ' )
smtp_server = input ( '请输入邮箱服务器地址SMTP server: ' )
to_addr = []
while True :
a = input ( '请输入收件人邮箱:' )
to_addr.append(a)
b = input ( '是否继续输入,n退出,任意键继续:' )
if b = = 'n' :
break
content =
msg = MIMEText(content, 'plain' , 'utf-8' )
msg[ 'From' ] = _format_addr(u '努力吧 <%s>' % from_addr)
msg[ 'To' ] = _format_addr(u '管理员 <%s>' % to_addr)
msg[ 'Subject' ] = Header(u '来自Hz的问候……' , 'utf-8' ).encode()
server = smtplib.SMTP_SSL(smtp_server, 465 )
server.set_debuglevel( 1 )
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
print ( '恭喜,发送成功' )
except :
print ( '发送失败,请重试' )
server.quit()
|
最后说一下,其实很多内容我也不是太懂,也是参考了一些,虽然邮件功能可以直接调用,但是多少想了解一些。今天就到此为止~~ |
免费评分
-
查看全部评分
|