Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,如何使用cron和smtp安排在特定时间发送电子邮件?_Python_Email_Cron_Smtp_Smtplib - Fatal编程技术网

在python中,如何使用cron和smtp安排在特定时间发送电子邮件?

在python中,如何使用cron和smtp安排在特定时间发送电子邮件?,python,email,cron,smtp,smtplib,Python,Email,Cron,Smtp,Smtplib,到目前为止,我只能发送电子邮件。这是我的密码: import smtplib email_user = 'myemail@gmail.com' server = smtplib.SMTP ('smtp.gmail.com', 587) server.starttls() server.login(email_user, 'email pass') #SET TIME HERE? from crontab import CronTab #EMAIL message = 'sending th

到目前为止,我只能发送电子邮件。这是我的密码:

import smtplib

email_user = 'myemail@gmail.com'
server = smtplib.SMTP ('smtp.gmail.com', 587)
server.starttls()
server.login(email_user, 'email pass')

#SET TIME HERE?
from crontab import CronTab

#EMAIL
message = 'sending this from python!'
server.sendmail(email_user, email_user, message)
server.quit()

我正在努力设定发送电子邮件的时间。如果有人也能帮我找出如何添加附件,那就太好了

假设您的
发送电子邮件()功能已经正常工作,我会:

import datetime as dt
import time
import smtplib

def send_email():
    email_user = 'myemail@gmail.com'
    server = smtplib.SMTP ('smtp.gmail.com', 587)
    server.starttls()
    server.login(email_user, 'email pass')

    #EMAIL
    message = 'sending this from python!'
    server.sendmail(email_user, email_user, message)
    server.quit()

send_time = dt.datetime(2018,8,26,3,0,0) # set your sending time in UTC
time.sleep(send_time.timestamp() - time.time())
send_email()
print('email sent')
如果您想定期发送电子邮件,可以执行以下操作:

import datetime as dt
import time
import smtplib

def send_email():
    email_user = 'myemail@gmail.com'
    server = smtplib.SMTP ('smtp.gmail.com', 587)
    server.starttls()
    server.login(email_user, 'email pass')

    #EMAIL
    message = 'sending this from python!'
    server.sendmail(email_user, email_user, message)
    server.quit()

def send_email_at(send_time):
    time.sleep(send_time.timestamp() - time.time())
    send_email()
    print('email sent')

first_email_time = dt.datetime(2018,8,26,3,0,0) # set your sending time in UTC
interval = dt.timedelta(minutes=2*60) # set the interval for sending the email

send_time = first_email_time
while True:
    send_email_at(send_time)
    send_time = send_time + interval

您还可以生成一个线程,并让该线程处理电子邮件的发送。

使用CRON发送电子邮件的最佳方法是使用Postfix和mailutils。按照以下步骤发送包含cron作业结果/错误的电子邮件

步骤1-安装后缀

sudo nano /etc/postfix/main.cf
首先,更新包数据库:

sudo apt update
接下来,安装mailtuils:

sudo apt install mailutils
最后,安装后缀:

sudo apt install postfix
在安装过程接近尾声时,您将看到一个类似下图的窗口。默认选项是Internet站点。这是本教程的推荐选项,因此请按TAB键,然后按ENTER键

选择无配置

步骤2-配置后缀

sudo nano /etc/postfix/main.cf
然后将下面的代码粘贴到空文件上

mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only

mydestination = $myhostname, localhost.$your_domain, $your_domain
保存并关闭文件。 最后,重新启动Postfix

sudo systemctl restart postfix
步骤3-测试SMTP服务器

echo "This is the body of the email" | mail -s "This is the subject line" your_email_address

你的操作系统是什么?Windows是我的osI对不起,我对这一点很陌生。你能解释一下第4行括号内的值是什么意思吗?@这里的格式是dt.datetime(年、月、日、小时、分钟、秒)。我得到一个错误,没有定义send_email。这就是为什么我写了“假设你已经有了send_email()函数”,只要把你发送电子邮件的代码放在send_email()下就可以了功能。@这里很好,请接受我的回答,这样我就可以有足够的分数来评论其他人的问题:P