通过Cron作业发送电子邮件

时间:2019-09-11 11:58:15

标签: xml python-3.x cron odoo-12

我正在创建一个自定义模块,该模块将自动结账忘记在一天结束时结账的员工,并会通过电子邮件发送相同的电子邮件。

我创建了自动结帐和电子邮件功能,创建了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电子邮件

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试图像字典一样对其进行迭代。