ODOO中使用SMTP(安全连接SSL/TLS)的465端口发送邮件

博客介绍了在ODOO中实现自动邮件提醒功能的步骤。首先要重启ODOO服务,安装或升级相关模块,接着通过设置-技术-自动化-安排的动作新建定时任务,需设置动作名称、涉及的数据库模型,将功能函数复制进python代码并按指定方式执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值