我正在创建一个自定义模块,该模块将自动结账忘记在一天结束时结账的员工,并会通过电子邮件发送相同的电子邮件。
我创建了自动结帐和电子邮件功能,创建了cron作业和电子邮件模板。我还配置了邮件服务器,它们工作正常。 这是我的代码
class hr_attendace(models.Model):
_inherit = ['hr.attendance']
def check_for_incomplete_attendances(self):
not_checkout = self.env['hr.attendance'].search([('check_out', '=', False)])
for rec in not_checkout:
date_time = (datetime.now() + timedelta(days=0)).strftime('%Y-%m-%d 18:29:59')
rec.check_out = date_time
email_template = self.env.ref('custom_attendance_2.email_template')
if email_template:
email_template.send_mail(rec.employee_id.work_email, force_send=True)
<odoo>
<data noupdate = "1">
<record id="ir_cron_module_auto_checkout" model="ir.cron">
<field name="name">Auto Checkout</field>
<field eval="True" name="auto_checkout"/>
<field name="interval_number">1</field>
<!-- <field name="nextcall">2019-09-03</field> -->
<field name="nextcall" eval="(DateTime.now() + timedelta(days=0)).strftime('%Y-%m-%d 18:29:59')"/>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field eval="True" name="doall" />
<field name="model_id" ref="hr_attendance.model_hr_attendance"/>
<field name="state">code</field>
<field name="code">
model.check_for_incomplete_attendances()
</field>
</record>
</data>
</odoo>
<odoo>
<data>
<record id="email_template" model="mail.template">
<field name="name">Attendance Reminder Email</field>
<field name="model_id" ref="hr_attendance.model_hr_attendance"/>
<field name="auto_delete" eval="False"/>
<field name="email_from">shringarg@trinesis.com</field>
<field name="email_to">${object.work_email}</field>
<field name="subject">Attendance Reminder ${object.name}</field>
<field name="body_html">
<![CDATA[
Hello ${object.name},<br/>
This is reminder that you didn't sign out today.<br/>
Best regards...<br/>]]>
</field>
</record>
</data>
</odoo>
运行cron作业时出现这些错误。员工正在退房,但邮件未发送。
2019-09-11 11:52:05,515 16973警告auto_checkout odoo.models:mail.mail.create()具有未知字段:。,@,a,c,g,h,i,l,m,n ,o,p,r,s,t,u 2019-09-11 11:52:06,766 16973信息auto_checkout odoo.addons.mail.models.mail_mail:通过邮件服务器ID #False发送批1电子邮件
答案 0 :(得分:1)
我不知道有任何文档可以支持此操作,但是根据我自己的实验,问题是将字符串传递给send_mail
,您可以在此行进行操作:
email_template.send_mail(rec.employee_id.work_email, force_send=True)
send_mail
方法将字典作为第一个参数,其中每个键都与您的电子邮件模板的字段名称匹配。因此,例如,如果您具有以下字段:
<field name="email_to">${object.work_email}</field>
然后您应该拨打此电话:
email_template.send_mail({'email_to': rec.employee_id}, force_send=True)
消息unknown fields: ., @, a, c, g, h, i, l, m, n, o, p, r, s, t, u
表示您输入了字符串;这些都是电子邮件地址中出现的所有字符(我想是您在gmail dot com上的名字),Odoo试图像字典一样对其进行迭代。