controller调用odoo的email发邮件
时间: 2025-05-02 12:51:49 浏览: 23
### 实现通过控制器发送电子邮件
为了实现在Odoo中通过控制器触发邮件发送功能,可以遵循以下方式构建代码逻辑。首先,在`__manifest__.py`文件中确保已经添加了对`mail`模块的依赖[^3]。
```python
'depends': ['base', 'mail'],
```
接着定义一个继承自`http.Controller`的新控制器类,用于处理来自前端页面或其他服务端点发出的请求。在这个例子中,假设有一个URL路径专门用来接收POST请求并执行发信操作:
```python
from odoo import http
from odoo.http import request
class EmailController(http.Controller):
@http.route('/send_email/', type='json', auth="public", website=True, csrf=False)
def send_email(self, **kw):
email_to = kw.get('email')
subject = "Test Subject"
body_html = "<p>This is a test message.</p>"
mail_pool = request.env['mail.mail']
values = {
'subject': subject,
'body_html': body_html,
'email_from': '[email protected]',
'email_to': email_to,
}
msg_id = mail_pool.sudo().create(values)
if msg_id:
try:
sent_mail = msg_id.send()
return {'status': True}
except Exception as e:
return {'error': str(e)}
else:
return {'status': False}
```
上述Python脚本展示了如何创建一个简单的JSON API接口来接受外部传入的数据参数(如收件人的邮箱地址),并通过调用内置的`mail.mail`对象完成实际的消息投递过程[^2]。
此段代码中的关键部分在于使用`request.env[]`获取环境上下文中可用的服务实例,并利用这些工具按照指定模板组装待发送的内容;最后尝试调用`.send()`方法将准备好的消息推送到目标地址列表里去。
值得注意的是,由于涉及到敏感信息的安全传输问题,建议仅允许经过身份验证后的合法用户访问此类API资源,或者至少采取适当措施保护免受恶意攻击的影响。此外,对于生产环境中部署的应用程序而言,应当仔细审查所有涉及网络通信的部分以确保其符合最新的安全标准和最佳实践指南。
阅读全文
相关推荐
















