在 python 中,如何使用 cron 和 smtp 安排电子邮件在特定时间发送?
How do I schedule an email to send at a certain time using cron and smtp, in python?
到目前为止,我只能发送电子邮件。这是我的代码:
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()
我正在努力设定发送电子邮件的时间。如果有人也能帮我弄清楚如何添加附件,那就太好了!
假设您的 send_email()
功能已经正常工作,我会这样做:
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 作业发送电子邮件 results/errors.
步骤 1 — 安装 Postfix
首先,更新包数据库:
sudo apt update
接下来,安装mailtuils:
sudo apt install mailutils
最后,安装后缀:
sudo apt install postfix
在安装过程接近尾声时,您将看到如下图所示的 window。默认选项是 Internet 站点。这是本教程的推荐选项,因此按 TAB,然后按 ENTER
Select无配置
步骤 2 — 配置 Postfix
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
到目前为止,我只能发送电子邮件。这是我的代码:
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()
我正在努力设定发送电子邮件的时间。如果有人也能帮我弄清楚如何添加附件,那就太好了!
假设您的 send_email()
功能已经正常工作,我会这样做:
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 作业发送电子邮件 results/errors.
步骤 1 — 安装 Postfix
首先,更新包数据库:
sudo apt update
接下来,安装mailtuils:
sudo apt install mailutils
最后,安装后缀:
sudo apt install postfix
在安装过程接近尾声时,您将看到如下图所示的 window。默认选项是 Internet 站点。这是本教程的推荐选项,因此按 TAB,然后按 ENTER
Select无配置
步骤 2 — 配置 Postfix
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