linux网站源码分享备份命令?linux备份脚本怎么写

老铁们,大家好,相信还有很多朋友对于linux网站源码分享备份命令和linux备份脚本怎么写的相关问题不太懂,没关系,今天就由我来为大家分享分享linux网站源码分享备份命令以及linux备份脚本怎么写的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

检查和答复电子邮件会占用大量的时间。当然,你不能只写一个程序来处理所有电子邮件,因为每个消息都需要有自己的回应。但是,一旦知道怎么编写收发电子邮件的程序,就可以自动化大量与电子邮件相关的任务。

例如,也许你有一个电子表格,包含许多客户记录,希望根据他们的年龄和位置信息,向每个客户发送不同格式的邮件。商业软件可能无法做这一点。好在,可以编写自己的程序来发送这些电子邮件,节省了大量复制和粘贴电子邮件的时间。

也可以编程发送电子邮件和短信,即使你远离计算机时,也能通知你。如果要自动化的任务需要执行几个小时,你不希望每过几分钟就回到计算机旁边,检查程序的状态。相反,程序可以在完成时向手机发短信,让你在离开计算机时,能专注于更重要的事情。

16.1SMTP

正如HTTP是计算机用来通过因特网发送网页的协议,简单邮件传输协议(SMTP)是用于发送电子邮件的协议。SMTP规定电子邮件应该如何格式化、加密、在邮件服务器之间传递,以及在你点击发送后,计算机要处理的所有其他细节。但是,你并不需要知道这些技术细节,因为Python的smtplib模块将它们简化成几个函数。

SMTP只负责向别人发送电子邮件。另一个协议,名为IMAP,负责取回发送给你的电子邮件,在16.3节“IMAP”中介绍。

16.2发送电子邮件

你可能对发送电子邮件很熟悉,通过Outlook、Thunderbird或某个网站,如Gmail或雅虎邮箱。遗憾的是,Python没有像这些服务一样提供一个漂亮的图形用户界面。作为替代,你调用函数来执行SMTP的每个重要步骤,就像下面的交互式环境的例子。

注意

不要在IDLE中输入这个例子,因为smtp.example.com、bob@example.com、MY_SECRET_PASSWORD和alice@example.com只是占位符。这段代码仅仅勾勒出Python发送电子邮件的过程。

>>>importsmtplib\n>>>smtpObj=smtplib.SMTP(&39;,587)\n>>>smtpObj.ehlo()\n(250,b&39;)\n>>>smtpObj.starttls()\n(220,b&39;)\n>>>smtpObj.login(&39;,&39;)\n(235,b&39;)\n>>>smtpObj.sendmail(&39;,&39;,&39;)\n{}\n>>>smtpObj.quit()\n(221,b&39;)

在下面的小节中,我们将探讨每一步,用你的信息替换占位符,连接并登录到SMTP服务器,发送电子邮件,并从服务器断开连接。

16.2.1连接到SMTP服务器

如果你曾设置了Thunderbird、Outlook或其他程序,连接到你的电子邮件账户,你可能熟悉配置SMTP服务器和端口。这些设置因电子邮件提供商而不同,但在网上搜索“<你的提供商>SMTP设置”,应该能找到相应的服务器和端口。

SMTP服务器的域名通常是电子邮件提供商的域名,前面加上SMTP。例如,Gmail的SMTP服务器是smtp.gmail.com。表16-1列出了一些常见的电子邮件提供商及其SMTP服务器(端口是一个整数值,几乎总是587,该端口由命令加密标准TLS使用)。

表16-1电子邮件提供商及其SMTP服务器

得到电子邮件提供商的域名和端口信息后,调用smtplib.SMTP()创建一个SMTP对象,传入域名作为一个字符串参数,传入端口作为整数参数。SMTP对象表示与SMTP邮件服务器的连接,它有一些发送电子邮件的方法。例如,下面的调用创建了一个SMTP对象,连接到Gmail:

>>>smtpObj=smtplib.SMTP(&39;,587)\n>>>type(smtpObj)\n<class&39;>

输入type(smtpObj)表明,smtpObj中保存了一个SMTP对象。你需要这个SMTP对象,以便调用它的方法,登录并发送电子邮件。如果smtplib.SMTP()调用不成功,你的SMTP服务器可能不支持TLS端口587。在这种情况下,你需要利用smtplib.SMTP_SSL()和465端口,来创建SMTP对象。

>>>smtpObj=smtplib.SMTP_SSL(&39;,465)

注意

如果没有连接到因特网,Python将抛出socket.gaierror:[Errno11004]getaddrinfofailed或类似的异常。

对于你的程序,TLS和SSL之间的区别并不重要。只需要知道你的SMTP服务器使用哪种加密标准,这样就知道如何连接它。在接下来的所有交互式环境示例中,smtpObj变量将包含smtplib.SMTP()或smtplib.SMTP_SSL()函数返回的SMTP对象。

16.2.2发送SMTP的“Hello”消息

得到SMTP对象后,调用它的名字古怪的EHLO()方法,向SMTP电子邮件服务器“打招呼”。这种问候是SMTP中的第一步,对于建立到服务器的连接是很重要的。你不需要知道这些协议的细节。只要确保得到SMTP对象后,第一件事就是调用ehlo()方法,否则以后的方法调用会导致错误。下面是一个ehlo()调用和返回值的例子:

>>>smtpObj.ehlo()\n(250,b&39;)

如果在返回的元组中,第一项是整数250(SMTP中“成功”的代码),则问候成功了。

16.2.3开始TLS加密

如果要连接到SMTP服务器的587端口(即使用TLS加密),接下来需要调用starttls()方法。这是为连接实现加密必须的步骤。如果要连接到465端口(使用SSL),加密已经设置好了,你应该跳过这一步。

下面是starttls()方法调用的例子:

>>>smtpObj.starttls()\n(220,b&39;)

starttls()让SMTP连接处于TLS模式。返回值220告诉你,该服务器已准备就绪。

16.2.4登录到SMTP服务器

到SMTP服务器的加密连接建立后,可以调用login()方法,用你的用户名(通常是你的电子邮件地址)和电子邮件密码登录。

>>>smtpObj.login(&39;,&39;)\n(235,b&39;)

传入电子邮件地址字符串作为第一个参数,密码字符串作为第二个参数。返回值235表示认证成功。如果密码不正确,Python会抛出smtplib.SMTPAuthenticationError异常。

将密码放在源代码中要当心。如果有人复制了你的程序,他们就能访问你的电子邮件账户!调用input(),让用户输入密码是一个好主意。每次运行程序时输入密码可能不方便,但这种方法不会在未加密的文件中留下你的密码,黑客或笔记本电脑窃贼不会轻易地得到它。

16.2.5发送电子邮件

登录到电子邮件提供商的SMTP服务器后,可以调用的sendmail()方法来发送电子邮件。sendmail()方法调用看起来像这样:

>>>smtpObj.sendmail(&39;,&39;,\n&39;)\n{}

sendmail()方法需要三个参数。

你的电子邮件地址字符串(电子邮件的“from”地址)。收件人的电子邮件地址字符串,或多个收件人的字符串列表(作为“to”地址)。电子邮件正文字符串。

电子邮件正文字符串必须以&39;开头,作为电子邮件的主题行。&39;换行符将主题行与电子邮件的正文分开。

sendmail()的返回值是一个字典。对于电子邮件传送失败的每个收件人,该字典中会有一个键值对。空的字典意味着对所有收件人已成功发送电子邮件。

Gmail应用程序专用密码

Gmail有针对谷歌账户的附加安全功能,称为应用程序专用密码。如果当你的程序试图登录时,收到“需要应用程序专用密码”的错误信息,就必须在Python脚本设置这样一个密码。具体如何设置谷歌账户的应用程序专用密码,参见http://nostarch.com/automatestuff/。

16.2.6从SMTP服务器断开

确保在完成发送电子邮件时,调用quit()方法。这让程序从SMTP服务器断开。

>>>smtpObj.quit()\n(221,b&39;)

返回值221表示会话结束。

要复习连接和登录服务器、发送电子邮件和断开的所有步骤,请参阅16.2节“发送电子邮件”。

16.3IMAP

正如SMTP是用于发送电子邮件的协议,因特网消息访问协议(IMAP)规定了如何与电子邮件服务提供商的服务器通信,取回发送到你的电子邮件地址的电子邮件。Python带有一个imaplib模块,但实际上第三方的imapclient模块更易用。本章介绍了如何使用IMAPClient,完整的文档在http://imapclient.readthedocs.org/。

imapclient模块从IMAP服务器下载电子邮件,格式相当复杂。你很可能希望将它们从这种格式转换成简单的字符串。pyzmail模块替你完成解析这些邮件的辛苦工作。在http://www.magiksys.net/pyzmail/可以找到PyzMail的完整文档。

从终端窗口安装imapclient和pyzmail。附录A包含了如何安装第三方模块的步骤。

16.4用IMAP获取和删除电子邮件

在Python中,查找和获取电子邮件是一个多步骤的过程,需要第三方模块imapclient和pyzmail。作为概述,这里有一个完整的例子,包括登录到IMAP服务器,搜索电子邮件,获取它们,然后从中提取电子邮件的文本。

>>>importimapclient\n>>>imapObj=imapclient.IMAPClient(&39;,ssl=True)\n>>>imapObj.login(&39;,&39;)\n&39;\n>>>imapObj.select_folder(&39;,readonly=True)\n>>>UIDs=imapObj.search([&39;])\n>>>UIDs\n[40032,40033,40034,40035,40036,40037,40038,40039,40040,40041]\n>>>rawMessages=imapObj.fetch([40041],[&39;,&39;])\n>>>importpyzmail\n>>>message=pyzmail.PyzMessage.factory(rawMessages[40041][&39;])\n>>>message.get_subject()\n&39;\n>>>message.get_addresses(&39;)\n[(&39;,&39;)]\n>>>message.get_addresses(&39;)\n[(JaneDoe&39;jdoe@example.com&39;cc&39;bcc&39;Followthemoney.\\r\\n\\r\\n-Ed\\r\\n&39;<divdir=&34;><div>Solong,andthanksforallthefish!<br><br></div>-\nAl<br></div>\\r\\n&39;imap.gmail.com&39;my_email_address@gmail.com&39;MY_SECRET_PASSWORD&39;my_email_address@gmail.comJaneDoeauthenticated(Success)&39;\\\\HasNoChildren&39;/&39;Drafts&39;\\\\HasNoChildren&39;/&39;Filler&39;\\\\HasNoChildren&39;/&39;INBOX&39;\\\\HasNoChildren&39;/&39;Sent&39;\\\\HasNoChildren&39;\\\\Flagged&39;/&39;[Gmail]/Starred&39;\\\\HasNoChildren&39;\\\\Trash&39;/&39;[Gmail]/Trash&39;\\HasNoChildren&39;/&39;INBOX&39;INBOX&39;ALL&39;ON05-Jul-2015&39;SINCE01-Jan-2015&39;BEFORE01-Feb-2015&39;UNSEEN&39;SINCE01-Jan-2015&39;FROMalice@example.com&39;SINCE01-Jan-2015&39;NOTFROMalice@example.com&39;ORFROMalice@example.comFROMbob@example.com&39;FROMalice@example.com&39;FROMbob@example.com&39;SINCE05-Jul-2015&39;BODY[]&39;meaningoflife&39;BODY[]&39;BODY[]&39;Delivered-To:my_email_address@gmail.com\\r\\n&39;Received:by10.76.71.167withSMTPid&39;\\r\\n&39;——=_Part_6000970_707736290.1404819487066–\\r\\n&39;SEQ&39;BODY[]&39;SEQ&39;BODY[]&39;SEQ&39;BODY[]&39;INBOX&39;BODY[]&39;BODY[]&39;Hello!&39;from&39;EdwardSnowden&39;esnowden@nsa.gov&39;to&39;,&39;)]\n>>>message.get_addresses(&39;)\n[]\n>>>message.get_addresses(&39;)\n[]

请注意,get_addresses()的参数是&39;、&39;、&39;或&39;。get_addresses()的返回值是一个元组列表。每个元组包含两个字符串:第一个是与该电子邮件地址关联的名称,第二个是电子邮件地址本身。如果请求的字段中没有地址,get_addresses()返回一个空列表。在这里,&39;抄送和&39;密件抄送字段都没有包含地址,所以返回空列表。

16.4.9从原始消息中获取正文

电子邮件可以是纯文本、HTML或两者的混合。纯文本电子邮件只包含文本,而HTML电子邮件可以有颜色、字体、图像和其他功能,使得电子邮件看起来像一个小网页。如果电子邮件仅仅是纯文本,它的PyzMessage对象会将html_part属性设为None。同样,如果电子邮件只是HTML,它的PyzMessage对象会将text_part属性设为None。

否则,text_part或html_part将有一个get_payload()方法,将电子邮件的正文返回为bytes数据类型(bytes数据类型超出了本书的范围)。但是,这仍然不是我们可以使用的字符串。啊!最后一步对get_payload()返回的bytes值调用decode()方法。decode()方法接受一个参数:这条消息的字符编码,保存在text_part.charset或html_part.charset属性中。最后,这返回了邮件正文的字符串。

输入以下代码,继续交互式环境的例子:

?>>>message.text_part!=None\nTrue\n>>>message.text_part.get_payload().decode(message.text_part.charset)\n?&39;\n?>>>message.html_part!=None\nTrue\n?>>>message.html_part.get_payload().decode(message.html_part.charset)\n&34;ltr&39;

我们正在处理的电子邮件包含纯文本和HTML内容,因此保存在message中的PyzMessage对象的text_part和html_part属性不等于None??。对消息的text_part调用get_payload(),然后在bytes值上调用decode(),返回电子邮件的文本版本的字符串?。对消息的html_part调用get_payload()和decode(),返回电子邮件的HTML版本的字符串?。

16.4.10删除电子邮件

要删除电子邮件,就向IMAPClient对象的delete_messages()方法传入一个消息UID的列表。这为电子邮件加上\\Deleted标志。调用expunge()方法,将永久删除当前选中的文件夹中带\\Deleted标志的所有电子邮件。请看下面的交互式环境的例子:

?>>>imapObj.select_folder(&39;,readonly=False)\n?>>>UIDs=imapObj.search([&39;])\n>>>UIDs\n[40066]\n>>>imapObj.delete_messages(UIDs)\n?{40066:(&39;,&39;)}\n>>>imapObj.expunge()\n(&39;,[(5452,&39;)])

这里,我们调用了IMAPClient对象的select_folder()方法,传入&39;作为第一个参数,选择了收件箱。我们也传入了关键字参数readonly=False,这样我们就可以删除电子邮件?。我们搜索收件箱中的特定日期收到的消息,将返回的消息ID保存在UIDs中?。调用delete_message()并传入UIDs,返回一个字典,其中每个键值对是一个消息ID和消息标志的元组,它现在应该包含\\Deleted标志?。然后调用expunge(),永久删除带\\Deleted标志的邮件。如果清除邮件没有问题,就返回一条成功信息。请注意,一些电子邮件提供商,如Gmail,会自动清除用delete_messages()删除的电子邮件,而不是等待来自IMAP客户端的expunge命令。

16.4.11从IMAP服务器断开

如果程序已经完成了获取和删除电子邮件,就调用IMAPClient的logout()方法,从IMAP服务器断开连接。

>>>imapObj.logout()

如果程序运行了几分钟或更长时间,IMAP服务器可能会超时,或自动断开。在这种情况下,接下来程序对IMAPClient对象的方法调用会抛出异常,像下面这样:

imaplib.abort:socketerror:[WinError10054]Anexistingconnectionwas\nforciblyclosedbytheremotehost

在这种情况下,程序必须调用imapclient.IMAPClient(),再次连接。

哟!齐活了。要跳过很多圈圈,但你现在有办法让Python程序登录到一个电子邮件账户,并获取电子邮件。需要回忆所有步骤时,你可以随时参考16.4节“用IMAP获取和删除电子邮件”。

16.5项目:向会员发送会费提醒电子邮件

假定你一直“自愿”为“强制自愿俱乐部”记录会员会费。这确实是一项枯燥的工作,包括维护一个电子表格,记录每个月谁交了会费,并用电子邮件提醒那些没交的会员。不必你自己查看电子表格,而是向会费超期的会员复制和粘贴相同的电子邮件。你猜对了,让我们编写一个脚本,帮你完成任务。

在较高的层面上,下面是程序要做的事:

从Excel电子表格中读取数据。找出上个月没有交费的所有会员。找到他们的电子邮件地址,向他们发送针对个人的提醒。

这意味着代码需要做到以下几点:

用openpyxl模块打开并读取Excel文档的单元格(处理Excel文件参见第12章)。创建一个字典,包含会费超期的会员。调用smtplib.SMTP()、ehlo()、starttls()和login(),登录SMTP服务器。针对会费超期的所有会员,调用sendmail()方法,发送针对个人的电子邮件提醒。

打开一个新的文件编辑器窗口,并保存为sendDuesReminders.py。

第1步:打开Excel文件

假定用来记录会费支付的Excel电子表格看起来如图16-2所示,放在名为duesRecords.xlsx的文件中。可以从http://nostarch.com/automatestuff/下载该文件。

图16-2记录会员会费支付电子表格

该电子表格中包含每个成员的姓名和电子邮件地址。每个月有一列,记录会员的付款状态。在成员交纳会费后,对应的单元格就记为paid。

该程序必须打开duesRecords.xlsx,通过调用get_highest_column()方法,弄清楚最近一个月的列(可以参考第12章,了解用openpyxl模块访问Excel电子表格文件单元格的更多信息)。在文件编辑器窗口中输入以下代码:

sendDuesReminders.py-Sendsemailsbasedonpaymentstatusinspreadsheet.\n\nimportopenpyxl,smtplib,sys\n\n39;duesRecords.xlsx&39;Sheet1&TODO:Checkeachmember&TODO:Logintoemailaccount.\n\n!python3\nCheckeachmember&39;paid&39;paid&!python3\nLogintoemailaccount.\nsmtpObj=smtplib.SMTP(&39;,587)\nsmtpObj.ehlo()\nsmtpObj.starttls()\nsmtpObj.login(&39;,sys.argv[1])

调用smtplib.SMTP()并传入提供商的域名和端口,创建一个SMTP对象。调用ehlo()和starttls(),然后调用login(),并传入你的电子邮件地址和sys.argv[1],其中保存着你的密码字符串。在每次运行程序时,将密码作为命令行参数输入,避免在源代码中保存密码。

程序登录到你的电子邮件账户后,就应该遍历unpaidMembers字典,向每个会员的电子邮件地址发送针对个人的电子邮件。将以下代码添加到sendDuesReminders.py:

sendDuesReminders.py-Sendsemailsbasedonpaymentstatusinspreadsheet.\n\n–snip–\n\n34;Subject:%sduesunpaid.\\nDear%s,\\nRecordsshowthatyouhavenot\npaidduesfor%s.Pleasemakethispaymentassoonaspossible.Thankyou!&34;%\n(latestMonth,name,latestMonth)\n?print(&39;%email)\n?sendmailStatus=smtpObj.sendmail(&39;,email,body)\n\n?ifsendmailStatus!={}:\nprint(&39;%(email,\nsendmailStatus))\nsmtpObj.quit()

这段代码循环遍历unpaidMembers中的姓名和电子邮件。对于每个没有付费的成员,我们用最新的月份和成员的名称,定制了一条消息,并保存在body中?。我们打印输出,表示正在向这个会员的电子邮件地址发送电子邮件?。然后调用sendmail(),向它传入地址和定制的消息?。返回值保存在sendmailStatus中。

回忆一下,如果SMTP服务器在发送某个电子邮件时报告错误,sendmail()方法将返回一个非空的字典值。for循环最后部分在?行检查返回的字典是否非空,如果非空,则打印收件人的电子邮件地址以及返回的字典。

程序完成发送所有电子邮件后,调用quit()方法,与SMTP服务器断开连接。

如果运行该程序,输出会像这样:

Sendingemailtoalice@example.com…\nSendingemailtobob@example.com…\nSendingemailtoeve@example.com…

收件人将收到如图16-3所示的电子邮件。

图16-3从sendDuesReminders.py自动发送的电子邮件

16.6用Twilio发送短信

大多数人更可能靠近自己的手机,而不是自己的电脑,所以与电子邮件相比,短信发送通知可能更直接、可靠。此外,短信的长度较短,让人更有可能阅读它们。

在本节中,你将学习如何注册免费的Twilio服务,并用它的Python模块发送短信。Twilio是一个SMS网关服务,这意味着它是一种服务,让你通过程序发送短信。虽然每月发送多少短信会有限制,并且文本前面会加上SentfromaTwiliotrialaccount,但这项试用服务也许能满足你的个人程序。免费试用没有限期,不必以后升级到付费的套餐。

Twilio不是唯一的SMS网关服务。如果你不喜欢使用Twilio,可以在线搜索freesmsgateway、pythonsmsapi,甚至twilioalternatives,寻找替代服务。

注册Twilio账户之前,先安装twilio模块。附录A详细介绍了如何安装第三方模块。

本节特别针对美国。Twilio确实也在美国以外的国家提供手机短信服务,本书并不包括这些细节。但twilio模块及其功能,在美国以外的国家也能用。更多信息请参见http://twilio.com/。

16.6.1注册Twilio账号

访问http://twilio.com/并填写注册表单。注册了新账户后,你需要验证一个手机号码,短信将发给该号码(这项验证是必要的,防止有人利用该服务向任意的手机号码发送垃圾短信)。

收到验证号码短信后,在Twilio网站上输入它,证明你拥有要验证的手机。现在,就可以用twilio模块向这个电话号码发送短信了。

Twilio提供的试用账户包括一个电话号码,它将作为短信的发送者。你将需要两个信息:你的账户SID和AUTH(认证)标志。在登录Twilio账户时,可以在Dashboard页面上找到这些信息。从Python程序登录时,这些值将作为你的Twilio用户名和密码。

16.6.2发送短信

一旦安装了twilio模块,注册了Twilio账号,验证了你的手机号码,登记了Twilio电话号码,获得了账户的SID和auth标志,你就终于准备好通过Python脚本向你自己发短信了。

与所有的注册步骤相比,实际的Python代码很简单。保持计算机连接到因特网,在交互式环境中输入以下代码,用你的真实信息替换accountSID、authToken、myTwilioNumber和myCellPhone变量的值:

?>>>fromtwilio.restimportTwilioRestClient\n>>>accountSID=&39;\n>>>authToken=&39;\n?>>>twilioCli=TwilioRestClient(accountSID,authToken)\n>>>myTwilioNumber=&39;\n>>>myCellPhone=&39;\n?>>>message=twilioCli.messages.create(body=&39;,from_=myTwilioNumber,to=myCellPhone)

键入最后一行后不久,你会收到一条短信,内容为:SentfromyourTwiliotrialaccount-Mr.Watson-Comehere–Iwanttoseeyou.。

因为twilio模块的设计方式,导入它时需要使用fromtwilio.restimportTwilioRestClient,而不仅仅是importtwilio?。将账户的SID保存在accountSID,认证标志保存在authToken中,然后调用TwilioRestClient(),并传入accountSID和authToken。TwilioRestClient()调用返回一个TwilioRestClient对象?。该对象有一个message属性,该属性又有一个create()方法,可以用来发送短信。正是这个方法,将告诉Twilio的服务器发送短信。将你的Twilio号码和手机号码分别保存在myTwilioNumber和myCellPhone中,然后调用create(),传入关键字参数,指明短信的正文、发件人的号码(myTwilioNumber),以及收信人的电话号码(myCellPhone)?

create()方法返回的Message对象将包含已发送短信的相关信息。输入以下代码,继续交互式环境的例子:

>>>message.to\n&39;\n>>>message.from_\n&39;\n>>>message.body\n&39;

to、from和body属性应该分别保存了你的手机号码、Twilio号码和消息。请注意,发送手机号码是在from属性中,末尾有一个下划线,而不是from。这是因为from是一个Python关键字(例如,你在frommodulenameimport*形式的import语句中见过它),所以它不能作为一个属性名。输入以下代码,继续交互式环境的例子:

>>>message.status\n&39;\n>>>message.date_created\ndatetime.datetime(2015,7,8,1,36,18)\n>>>message.date_sent==None\nTrue

status属性应该包含一个字符串。如果消息被创建和发送,date_created和date_sent属性应该包含一个datetime对象。如果已收到短信,而status属性却设置为&39;,date_sent属性设置为None,这似乎有点奇怪。这是因为你先将Message对象记录在message变量中,然后短信才实际发送。你需要重新获取Message对象,查看它最新的status和date_sent。每个Twilio消息都有唯一的字符串ID(SID),可用于获取Message对象的最新更新。输入以下代码,继续交互式环境的例子:

>>>message.sid\n&39;\n?>>>updatedMessage=twilioCli.messages.get(message.sid)\n>>>updatedMessage.status\n&39;\n>>>updatedMessage.date_sent\ndatetime.datetime(2015,7,8,1,36,18)

输入message.sid将显示这个消息的SID。将这个SID传入Twilio客户端的get()方法?,你可以取得一个新的Message对象,包含最新的信息。在这个新的Message对象中,status和date_sent属性是正确的。

status属性将设置为下列字符串之一:&39;、&39;、&39;、&39;、&39;或&39;。这些状态不言自明,但对于更准确的细节,请查看http://nostarch.com/automatestuff/的资源。

用Python接收短信

遗憾的是,用Twilio接收短信比发送短信更复杂一些。Twilio需要你有一个网站,运行自己的Web应用程序。这已超出了本书的范围,但你可以在本书的资源中找到更多细节(http://nostarch.com/automatestuff/)。

16.7项目:“只给我发短信”模块

最常用你的程序发短信的人可能就是你。当你远离计算机时,短信是通知你自己的好方式。如果你已经用程序自动化了一个无聊的任务,它需要运行几小时,你可以在它完成时,让它用短信通知你。或者可以定期运行某个程序,它有时需要与你联系,例如天气检查程序,用短信提醒你带伞。

举一个简单的例子,下面是一个Python小程序,包含了textmyself()函数,它将传入的字符串参数作为短信发出。打开一个新的文件编辑器窗口,输入以下代码,用自己的信息替换帐户SID,认证标志和电话号码。将它保存为textMyself.py。

textMyself.py-Definesthetextmyself()functionthattextsamessage\nPresetvalues:\naccountSID=&39;\nauthToken=&39;\nmyNumber=&39;\ntwilioNumber=&39;\n\nfromtwilio.restimportTwilioRestClient\n\n?deftextmyself(message):\n?twilioCli=TwilioRestClient(accountSID,authToken)\n?twilioCli.messages.create(body=message,from_=twilioNumber,to=myNumber)

该程序保存了账户的SID、认证标志、发送号码及接收号码。然后它定义了textmyself(),接收参数?,创建TwilioRestClient对象?,并用你传入的消息调用create()?。

如果你想让其他程序使用textmyself()函数,只需将textMyself.py文件和Python的可执行文件放在同一个文件夹中(Windows上是C:\\Python34,OSX上是/usr/local/lib/python3.4,Linux上是/usr/bin/python3)。现在,你可以在其他程序中使用该函数。只要想在程序中发短信给你,就添加以下代码:

importtextmyself\ntextmyself.textmyself(&39;)

注册Twilio和编写短信代码只要做一次。在此之后,从任何其他程序中发短信,只要两行代码。

16.8小结

通过因特网和手机网络,我们用几十种不同的方式相互通信,但以电子邮件和短信为主。你的程序可以通过这些渠道沟通,这给它们带来强大的新通知功能。甚至可以编程运行在不同的计算机上,相互直接通过电子邮件能信,一个程序用SMTP发送电子邮件,另一个用IMAP收取。

Python的smtplib提供了一些函数,利用SMTP,通过电子邮件提供商的SMTP服务器发送电子邮件。同样,第三方的imapclient和pyzmail模块让你访问IMAP服务器,并取回发送给你的电子邮件。虽然IMAP比SMTP复杂一些,但它也相当强大,允许你搜索特定电子邮件、下载它们、解析它们,提取主题和正文作为字符串值。

短信与电子邮件有点不同,因为它不像电子邮件,发送短信不仅需要互联网连接。好在,像Twilio这样的服务提供了模块,允许你通过程序发送短信。一旦通过了初始设置过程,就能够只用几行代码来发送短信。掌握了这些模块,就可以针对特定的情况编程,在这些情况下发送通知或提醒。现在,你的程序将超越运行它们的计算机!

本文摘自《Python编程快速上手让繁琐工作自动化》

本书是一本面向实践的Python编程实用指南。本书的目的,不仅是介绍Python语言的基础知识,而且还通过项目实践教会读者如何应用这些知识和技能。本书的第一部分介绍了基本的Python编程概念,第二部分介绍了一些不同的任务,通过编写Python程序,可以让计算机自动完成它们。第二部分的每一章都有一些项目程序,供读者学习。每章的末尾还提供了一些习题和深入的实践项目,帮助读者巩固所学的知识。附录部分提供了所有习题的解答。

本书适合任何想要通过Python学习编程的读者,尤其适合缺乏编程基础的初学者。通过阅读本书,读者将能利用最强大的编程语言和工具,并且将体会到Python编程的快乐。

好了,文章到这里就结束啦,如果本次分享的linux网站源码分享备份命令和linux备份脚本怎么写问题对您有所帮助,还望关注下本站哦!

Published by

风君子

独自遨游何稽首 揭天掀地慰生平