如何使用python创建从openerp自动发送邮件的程序

2024-05-07

如何使用python创建从openerp自动发送邮件的程序?

我已经创建了 openerp 模块。当生成客户端 ID 时,我正在尝试向客户端发送邮件。

在 sale 文件夹中的 sale.py 中。当将潜在客户转换为客户时,我想向客户发送邮件。所以在 sale.py 中。我添加了以下代码行。

self.pool.get('email.template').send_mail(cr, uid, email_template_id, object_id,False, context=context)

我从 email_template 数据库获取 email_Template_id 。

解释一下什么是email_template_id、object_id? 什么是模板? 什么是消息?

我完全困惑了。 还有其他方法可以自动发送邮件吗?

提前致谢。


您可以使用服务器操作来实现此目的。您可以通过访问设置»技术»操作»服务器操作或在模块上创建XML来在OpenERP中创建服务器操作。

我将在此处留下一个服务器操作的示例,当我正在开发的模块上的对象达到特定状态时,我将使用该服务器操作向用户发送电子邮件:

<?xml version="1.0" encoding="UTF-8"?>
<openerp>
    <data>
        <record id="ir_actions_server_send_email_when_closed_nconf" model="ir.actions.server">
            <field name="name">Auto-email when request is closed, not confirmed</field>
            <field name="model_id" ref="model_generic_request"/>
            <field name="state">email</field>
            <field name="type">ir.actions.server</field>
            <field name="condition">True</field>
            <field name="email">object.requestor.email</field>
            <field name="subject">Your request object.name has been closed (not confirmed)</field>
            <field name="message"><![CDATA[
THIS IS AN AUTOMATED EMAIL. DO NOT REPLY.

Hello,

We are here to inform you that the request [[object.name]] you submitted on [[object.request_date]] with the following data:

        | Request - Details
        |=========================
        | Number: [[object.id]]
        |=========================
        | Responsible Person: [[object.responsible_name.name]]
        | Request description: [[object.request_description]]
        | Stating reasons: [[object.stating_reasons]]
        |=========================
        | Notes: [[object.notes]]


Has not been confirmed and is closed.

If you have any question, do not hesitate to contact your supervisor.

Thank you!]]>
            </field>            
        </record>
    </data>
</openerp>

此操作是从工作流中调用的。就您而言,您可以在保存表单时调用它(状态=草稿,也许?)。

因此,您必须在工作流活动定义中添加对服务器操作的调用:

    <record model="workflow.activity" id="act_closed_nconf">
        <field name="wkf_id" ref="wkf_request" />
        <field name="name">request_closed_nconf</field>
        <field name="action_id" ref="ir_actions_server_send_email_when_closed_nconf"/>
        <field name="kind">function</field>
        <field name="action">close_nconf_request()</field>
        <field name="flow_stop">True</field>
    </record>

希望这可以帮助!

------ 对更扩展的答案进行一点编辑-----

好的,我会尝试做一个短片几乎功能齐全例子。

在您的 python 文件中(如果尚未添加),您必须添加一些状态才能使工作流程正常运行。

class whatever(osv.osv):
    _name='whatever'
    _description='whatever'
    _columns={
        'name': fields.char('whatever', size=64, required=True),
        'state': fields.selection([('draft','Draft'),
            ('sent','Sent'),
            ('closed','Closed'),
            ],
            'Status', readonly=True, track_visibility='onchange',
        ),
        (... some other fields in here...)
    }
    _defaults={
        'state': 'draft',
    }

    #these 3 functions are called by the workflow
    def draft(self, cr, uid, ids, context=None):
        self.write(cr, uid, ids, {'state': 'draft'})
        return True

    def send(self, cr, uid, ids, context=None):
        self.write(cr, uid, ids, {'state': 'sent'})
        return True

    def close(self, cr, uid, ids, context=None):
        self.write(cr, uid, ids, {'state': 'closed'})
        return True    
whatever()

然后,您必须有一个适用于您的对象的工作流定义,这将是您的 xml 的内容:

<?xml version="1.0"?>
<openerp>
    <data>
        <record model="workflow" id="wkf_whatever">
            <field name="name">whatever.wkf</field>
            <field name="osv">whatever</field>
            <field name="on_create">True</field>
        </record>

        <!-- activities -->
        <record model="workflow.activity" id="act_draft">
            <field name="wkf_id" ref="wkf_whatever" />
            <field name="flow_start">True</field>
            <field name="name">draft</field>
            <field name="action_id" ref="send_automatic_email"/>
            <field name="kind">function</field>
            <field name="action">draft()</field>
        </record>
        <record model="workflow.activity" id="act_send">
            <field name="wkf_id" ref="wkf_whatever" />
            <field name="name">send</field>
            <field name="kind">function</field>
            <field name="action">send()</field>
        </record>
        <record model="workflow.activity" id="act_close">
            <field name="wkf_id" ref="wkf_whatever" />
            <field name="flow_stop">True</field>
            <field name="name">close</field>
            <field name="kind">function</field>
            <field name="action">close()</field>
        </record>

        <!-- transitions -->
        <record model="workflow.transition" id="whatever_t1">
            <field name="act_from" ref="act_draft" />
            <field name="act_to" ref="act_send" />
            <field name="signal">draft</field>
        </record>
        <record model="workflow.transition" id="whatever_t2">
            <field name="act_from" ref="act_send" />
            <field name="act_to" ref="act_close" />
            <field name="signal">close</field>
        </record>
    </data>
</openerp>

线路<field name="action_id" ref="send_automatic_email"/>在活动声明中调用 ID 为“send_automatic_email”的服务器操作

还有你的动作服务器:

<?xml version="1.0" encoding="UTF-8"?>
<openerp>
    <data>
        <record id="send_automatic_email" model="ir.actions.server">
            <field name="name">Send automatic email</field>
            <field name="model_id" ref="model_whatever"/>
            <field name="state">email</field>
            <field name="type">ir.actions.server</field>
            <field name="condition">True</field>
            <field name="email">object.requestor.email</field>
            <field name="subject">Your whatever: object.name has been created</field>
            <field name="message"><![CDATA[
THIS IS AN AUTOMATED EMAIL. DO NOT REPLY.

Hello,

bla bla bla bla

In here you will write whatever you want, and can access to data stored in your database with, for example [[object.name]] to access the field "name"

            </field>            
        </record>
    </data>
</openerp>

有了这 3 个文件(以及其中的一些更改!),您应该能够做您想做的事情。

不要忘记,您必须重新启动 OpenERP 服务器(以便重新编译 python 文件中的更改)并更新模块以加载 XML 文件!

祝你好运!

-- 差点忘了!

在 xml 视图文件中,您必须在表单视图中添加这些按钮才能调用工作流程操作:

<header>
    <button name="send" class="oe_highlight" string="Send" type="workflow" states="draft"/>
    <button name="close" class="oe_highlight" string="Close" type="workflow" states="sent"/>
    <field name="state" widget="statusbar" statusbar_visible="draft,sent,closed" />
</header>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用python创建从openerp自动发送邮件的程序 的相关文章

  • 如何在odoo中重写js函数

    我想加载 shop checkout url 函数是 odoo define change info order website sale change info order function require use strict oe w
  • Mailchimp 自动化多次发送同一封电子邮件

    我在登陆页面上使用 mailchaimp 自动化工作流程向我的客户发送电子邮件 自动化工作流程是 客户在我的表格中输入他的电子邮件 使用 api V3 将客户添加到我的 mailchimp 列表 或更新 如果已存在 我使用此触发器调用发送第
  • DMARC/SPF/DKIM 未使用第三方邮件进行身份验证

    我们最近为我们的域实施了 DMARC 记录 v DMARC1 p 隔离 pct 100 rua mailto 电子邮件受保护 cdn cgi l email protection 隔离 100 未经身份验证的电子邮件并将汇总报告发送给 我
  • Flutter“Mailer”API 多图像附件

    我正在制作一个简单的应用程序 用于从用户获取个人信息和图像数量 然后通过后端邮件 API 通过一键单击按钮发送它们 到目前为止 我可以通过邮件获取和发送 FormData 但我不知道如何发送图像数组 我已经尝试了几个 API 但 Maile
  • 向 yahoo 和 hotmail 用户发送电子邮件?

    我正在使用 php 和 mysql 每次用户在我的网站上注册时 我都会使用 php mail 发送一封电子邮件进行身份验证 最近我发现 很多Yahoo和Hotmail用户还没有激活他们的帐户 假设 1000 个用户中 只有 200 个被激活
  • MIME::Lite - 无法发送邮件 [smtp.gmail.com 不支持 SMTP auth() 命令]

    use MIME Lite use warnings use MIME Base64 use Authen SASL use MIME Lite use MIME Base64 use Authen SASL use warnings us
  • 我如何从 iPhone 设备获取电子邮件历史记录..?

    friends 我想从我的 iPhone 访问电子邮件历史记录 并且还希望在收到新邮件时收到通知 如果可能的话 请向我提供源代码片段 Thanks 简而言之 使用任何已记录的 API 都是不可能的
  • Outlook 有条件 CSS If 吗?

    我需要一些特定的 css 来发送 html 电子邮件 但仅限于 Outlook 我正在寻找相当于
  • PHP语言问题

    我有一个 php 页面 它将邮件发送到特定电子邮件 其中包含此页面表单中的数据 邮件必须以网站的母语 阿拉伯语 发送 但是当我单击表单上的提交按钮时 收到的邮件一半可读 阿拉伯语 另一部分不可读 符号 我想知道如何解决这个问题并且能够发送邮
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • 如何通过 UNIX mailx 命令发送电子邮件?

    如何通过 UNIX 发送电子邮件mailx命令 一个例子 echo something mailx s subject email protected cdn cgi l email protection 发送附件 uuencode fil
  • 检查 paypal 电子邮件地址是否是经过验证的用户

    我想在购买之前检查尝试从我的网站购买商品的 PayPal 用户是否拥有经过验证的帐户 一旦用户未经验证 他 她进行的任何付款都将失败 资金将自动返还给用户 由于欺诈问题 我是否可以添加或编辑任何代码以使其正常工作 好吧 我找到了这个 htt
  • Python 2:SMTPServerDisconnected:连接意外关闭

    我在用 Python 发送电子邮件时遇到一个小问题 me my email address you recipient s email address me email protected cdn cgi l email protectio
  • 电子邮件链接在 Android 上不起作用

    我有 HTML 格式的点击电子邮件链接的代码 它在我的电脑上运行良好 但在移动设备上不起作用 我只有 Android 所以我不知道问题是否仅在 Android 上或所有移动设备上 当我按下链接时 浏览器显示 网页无法显示 邮寄至 电子邮件受
  • Symfony2 - 将 Swiftmailer 添加为服务

    我想将我的电子邮件代码从我的控制器移至服务中 到目前为止我已完成以下操作 在 services yml 中创建条目 在 acme demobundle services EmailManager php 中创建了一个 EmailManage
  • PHP 邮件结果错误:“标头丢失”

    我已经使用 php 邮件表单有一段时间了 现在它无法在新网站上运行 出现以下错误结果 PHP 警告 mail function mail sendmail from 未在 php ini 中设置 或第 16 行 E home mypagef
  • 我可以用 Java 在邮件服务器上执行搜索吗?

    我正在尝试使用 Java 搜索我的 Gmail 使用 JavaMail 我可以通过消息搜索来执行消息 如下所示 Properties props System getProperties props setProperty mail sto
  • Java特殊字符替换

    我有一段文字 Csukl si roham gy t rheti a sv deket annyit emlegetikmostans g ism t a sv d modellt Magyarorsz gon 在原始文本中根本没有换行符
  • 退回电子邮件处理值得吗?

    我们有一个网络应用程序 在电子邮件通知方面没有什么特别的 很高兴知道最终用户输入的电子邮件地址是否错误并且向该地址发送的邮件是否是炸弹 在垃圾邮件感染电子邮件的现代世界中 是否仍然值得尝试捕获退回邮件 在当今的邮件服务器配置中 通常认为最好
  • 如何解决错误:消息:fsockopen():无法连接到 ssl://smtp.gmail.com:465(连接被拒绝)

    我在用着代码点火器我创建了一个电子邮件功能来将电子邮件发送到特定的电子邮件 ID public function email email config protocol smtp config smtp host ssl smtp gmai

随机推荐

  • 获取没有特定祖先 xml xpath 的节点

    我想要 xpath 它获取没有祖先的节点 它是特定节点的第一个后代 假设我们有这样的 xml 文档 a b This node b a
  • CKEditor - 内联:以禁用模式显示

    我正在尝试在内联模式下使用 CKEditor 如下所示 var div div content CKEDITOR disableAutoInline true CKEDITOR inline div 0 单击 div 时 将显示 CKEdi
  • 在android中重叠屏幕

    在下面的布局中 我有一个名为扫描设备的文本视图 其中显示设备名称 但我的设备列表显示在屏幕上方 任何人都可以帮助我如何滚动视图应该在设备列表内 滚动屏幕时 它显示设备列表 但它显示在屏幕上方 想要显示在屏幕内
  • Windows 控制台“ESC[2J”并没有真正“清除”屏幕

    我知道这类问题经常被问到 但我认为这个问题有点不同 需要被问到 新的 Windows 控制台支持 ANSI VT100 控制代码 ANSI VT100 控制代码 http www termsys demon co uk vtansi htm
  • 错误LNK2001:无法解析的外部符号公共:静态类[重复]

    这个问题在这里已经有答案了 我不明白为什么我会收到这个错误 任何人都可以伸出援手吗 我需要在头文件中声明VideoCapture捕获并在Video cpp中调用它 Video h class Video public static Vide
  • mongodb c# 选择特定字段

    需要一些帮助来创建generic按名称选择字段的方法 像这样的东西 T GetDocField
  • 如何防止模块被导入两次?

    在编写python模块时 有没有办法防止它被客户端代码导入两次 就像 c c 头文件一样 ifndef XXX define XXX endif 非常感谢 Python 模块不会被多次导入 仅运行两次 import 不会重新加载模块 如果你
  • Xcode 中的“使用不间断空格 (U+00A0) 代替常规空格”警告

    When typing a space character in Xcode a warning appears sometimes 使用不间断空格 U 00A0 代替常规空格 早期的 Xcode 版本显示以下消息 将 Unicode 字符
  • 如何获取表单的onSubmit事件?

    我想知道如何抢onsubmit表单中的事件来进行一些表单验证 因为我无权直接访问它 我正在编写一个用于评论的 WordPress 插件 因此无法直接访问表单标签或提交按钮 我在尝试为我的插件执行此操作时感到非常沮丧 因此我在下面编写了一个
  • 如何选择集合的第一个元素作为查询的列

    表 t 有两列 a 和 b a是整数 b是集合 我想为每一行选择 a 和集合 b 的第一个值 我试过了 但没用 WITH s a b AS SELECT 1 ff FROM DUAL UNION ALL SELECT 1 ee FROM D
  • 如何将十进制整数转换为十六进制整数? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions cout lt
  • 如何运行 Abaqus 宏 (.py) 脚本

    我是Python新手 我使用 Abaqus 宏管理器生成了一个宏 它是一个 py 脚本 我意识到该脚本仅在从 Abaqus 管理器运行时才有效 并且不能自行运行 请有人知道如何修改这个脚本 以便我可以在不使用 Abaqus 的情况下运行它
  • 如何绘制两个 ggplot 密度分布之间的差异?

    我想使用 ggplot2 来说明两个相似密度分布之间的差异 这是我拥有的数据类型的玩具示例 library ggplot2 Make toy data n sp lt 100000 n dup lt 50000 D lt data fram
  • 退出失败设置错误代码

    我有一个 C Windows 程序无法设置退出代码 该程序非常复杂 我目前无法通过简单的测试用例重现该程序 我确实知道该程序调用exit 1 因为我在那一行有一个断点 在我跨过它之后 调试器 VS2010 立即打印The program p
  • 使用 Rails 自动登录?

    我正在尝试使用 Rails 的 Restful Authentication 插件建立一个简单的身份验证系统 我只是想知道它是如何工作的 b c 我似乎无法弄清楚 cookie 的要求是什么 以及如何做到这一点浏览器始终会记住您 6 个多月
  • 难道 Linq to SQL 没有抓住要点吗? ORM 映射器(SubSonic 等)不是次优解决方案吗?

    我希望社区能够了解我对 Linq to Sql 和其他 ORM 映射器的一些想法 我喜欢 Linq to Sql 以及用本机开发语言表达数据访问逻辑 或一般的 CRUD 操作 的想法 而不必处理 C 和 SQL 之间的 阻抗不匹配 例如 要
  • 无法实例化名为 GLKView 的类

    我得到了这个异常 2014 02 19 19 08 34 590 MyApp 42353 70b Terminating app due to uncaught exception NSInvalidUnarchiveOperationEx
  • 在asp.net mvc 3项目中渲染部分视图onclick

    在我的 mvc 项目中 我有一个简单的项目列表 其中包含如下的增删改查操作 tbody foreach var item in Model tr td item Title td td item Body td td item Price
  • Android ListView,如果arrayAdapter的arrayList为空则显示消息

    我需要帮助 我有一个 Listview setListAdapter arrayAdapter 和数组适配器有一个 arrayList If my arrayList is empty it shows loading images it
  • 如何使用python创建从openerp自动发送邮件的程序

    如何使用python创建从openerp自动发送邮件的程序 我已经创建了 openerp 模块 当生成客户端 ID 时 我正在尝试向客户端发送邮件 在 sale 文件夹中的 sale py 中 当将潜在客户转换为客户时 我想向客户发送邮件