我正在尝试通过Python发送邮件(加载模板)。
我在版本7中使用send_mail
模型的函数email.template
执行了此操作。现在,我想要版本8,但我无法管理它。
这不是关于SMTP服务器和模板的问题,因为如果我手动发送邮件,它就会正确地掌握它的命运。
似乎它没有进入函数send_mail
(我在函数的第一行上方写了一条记录器信息消息,它从未出现过。)
这是我的代码:
return self.env['email.template'].send_mail(
self.env.cr, self.env.uid, template.id, self.id, force_send=True,
context=self.env.context)
我还检查了函数需要的template.id
和self.id
参数是否正确。但是没有错误,没有消息,它忽略了这个功能。我也试过没有cr
,uid
和context
,但结果相同。
顺便说一句,send_mail
函数有一个我以前从未见过的装饰器,@api.cr_uid_id_context
,其含义我不知道。
有人可以帮助我吗?
答案 0 :(得分:5)
使用新API(self.env
而不是self.pool
)时,您不仅不再需要传递cr
/ uid
/ context
参数,因为你通常也不会传递id(s)
;相反,您browse()
获取一个对象,然后在其上调用该方法。
尝试:
return template.send_mail(self.id, force_send=True)
答案 1 :(得分:2)
过了一段时间我才发现问题。我将我的代码与调用相同函数的其他模块进行了比较,并尝试模拟它们。
最后,我管理它使用email.template
而不是pool
调用env
模型,这样:
return self.pool['email.template'].send_mail(
self.env.cr, self.env.uid, template.id, self.id, force_send=True,
context=self.env.context)
现在进入该功能并且它可以工作,邮件将与所需的模板一起发送。
答案 2 :(得分:1)
一旦我为同样的目的创建了一个模板,请检查它并尝试解决您的问题。
for rec in job_records:
_logger.error('In project task listttttttttttttttttttttttttttttt %s', rec.job_id.partner_id.email)
attachment_ids = self.pool.get('ir.attachment').search(cr, uid, [('res_model','=', 'hr.applicant'),('res_id','=',rec.id),('blind_cv','=','True')])
message = ("Hello %s \n Below Prurchase Order is Delay Today: \n Supplier Name : %s \n Purchase Order Refereance : %s \n Order Date : %s \n Delivery Date : %s \n Product Names : %s \n\n")
# context.update({'default_student_ids' : [(6, 0, [rec.id])]})
vals = {'state': 'outgoing',
'subject': 'CVs',
'body_html': '<pre>%s</pre>' % message,
'email_to': rec.job_id.partner_id.email,
'email_from': 'rahuls.logicious@gmail.com',
'attachment_ids': [(6, 0, attachment_ids)],
}
email_ids.append(self.pool.get('mail.mail').create(cr, uid, vals, context=context))
if email_ids:
self.pool.get('mail.mail').send(cr, uid, email_ids, context=context)
答案 3 :(得分:1)
你可以这样做:
def send_email(self, cr, uid, ids, vals, context=None):
# Set Context with ids
compose_ctx = dict(context,active_ids=ids)
# Set your template search domain
search_domain = [('name', '=', 'Application accepted')]
# Get template id
template_id = self.pool['email.template'].search(cr, uid, search_domain, context=context)[0]
# Compose email
compose_id = self.pool['mail.compose.message'].create(cr, uid, {
'model': self._name,
'composition_mode': 'mass_mail',
'template_id': template_id,
'post': True,
'notify': True,
}, context=compose_ctx)
self.pool['mail.compose.message'].write(cr, uid, [compose_id], self.pool['mail.compose.message'].onchange_template_id(cr, uid, [compose_id], template_id, 'mass_mail', self._name, False,context=compose_ctx)['value'],context=compose_ctx)
# Send mail with composed id
self.pool['mail.compose.message'].send_mail(cr, uid, [compose_id], context=compose_ctx)