1. 自动邮件提醒功能
-*- coding: utf-8 -*-
from odoo import models, fields, api, tools
import datetime
import time
import smtplib
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.header import Header
class PurchaseDelay(models.Model):
_name = 'stock.picking'
_inherit = ['stock.picking', 'mail.thread']
@api.multi
def _email_delay_remind(self):
lines = self.env["stock.picking"].search([('state', 'in', ('assigned', 'waiting', 'confirmed'))])
# 遍历所有的发件服务器
email_servers = self.env["ir.mail_server"].search([])
# email_servers[0]: 正常使用的发件服务器
mail_host = email_servers[0].smtp_host # 设置服务器
mail_user = email_servers[0].smtp_user # 用户名
mail_pass = email_servers[0].smtp_pass # 密码
mail_port = email_servers[0].smtp_port # SMTP 端口
sender = email_servers[0].smtp_user # 发件人
one_week_sec = 604800 # 一周
to_addr = ''
for order in lines:
current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 当前时间
scheduled_time = order.scheduled_date # 预期收货时间
# 日期转换为秒
cur_time = time.mktime(time.strptime(current_time,"%Y-%m-%d %H:%M:%S"))
end_time = time.mktime(time.strptime(str(scheduled_time),"%Y-%m-%d %H:%M:%S"))
diff_time = cur_time - end_time
# 若逾期时间超过一周,发送邮件提醒
if diff_time > one_week_sec:
if order.create_uid.name == 'OdooBot':
receivers = [ order.company_id.store_keeper_id.email] # 收件人r
to_addr = order.company_id.store_keeper_id.email
else:
receivers = [ order.create_uid.email, order.company_id.store_keeper_id.email] # 收件人
to_addr = order.create_uid.email+','+ order.company_id.store_keeper_id.email
if isinstance(order.origin, str):
oredr_origin = order.origin
else:
oredr_origin = '无源单据'
# 邮件内容
mail_msg = '''
<h2>您有邮件提醒</h2>
<h3>源单据:'''+oredr_origin+'''</h3>
'''
message = MIMEText(mail_msg, 'html', 'utf-8')
message['From'] = Header("xxx@xxx.com", 'utf-8')
message['To'] = to_addr
message['Subject'] = Header('邮件提醒', 'utf-8') # 主题
try:
smtpObj = SMTP_SSL(mail_host) # SMTP SSL连接安全限制,默认端口号465,采用SMTP_SSL()发送
# smtpObj = smtplib.SMTP() # SMTP没有设置连接安全限制,默认端口号25,直接采用smtplib.SMTP() 发送
# smtpObj.connect(mail_host, 25)
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print("Email sent successfully!")
except smtplib.SMTPException:
print("Error: Unable to send mail!")
2. 重启ODOO服务,回到网页安装或者升级上述代码所在的模块
3. 设置-技术-自动化-安排的动作
在‘安排的动作’中新建一个定时任务:
动作名称: 定时任务的名称
模型:本次定时任务涉及的数据库模型
python代码:将上述python代码中的功能函数_email_delay_remind
复制进来,执行方式:model._email_delay_remind()