如何通过SendinBlue SMTP API调用指定事务邮件模板?
解决SendinBlue调用指定事务邮件模板的问题
你当前的代码已经定义了模板ID的映射,但没有将其关联到实际API调用中。要调用SendinBlue平台创建好的模板,需要在SendSmtpEmail对象中指定template_id参数,同时移除硬编码的html_content和subject(模板本身已包含这些内容,除非你需要动态覆盖)。
修改后的完整代码
from __future__ import print_function import sib_api_v3_sdk from sib_api_v3_sdk.rest import ApiException from pprint import pprint from flask import request, render_template from sql_helper import * # 配置API密钥 api_config = sib_api_v3_sdk.Configuration() api_config.api_key['api-key'] = '你的API密钥' # 初始化API实例 api_instance = sib_api_v3_sdk.TransactionalEmailsApi(sib_api_v3_sdk.ApiClient(api_config)) # 基础发送配置(可根据需求调整) sender = {"name":"公司名称","email":"admin@company.com"} reply_to = {"email":"admin@company.com","name":"John Doe"} headers = {"Some-Custom-Name":"unique-id-1234"} def send_email(template, recipient, custom_params=None): # 映射模板名称到平台上的模板ID template_map = { "approve": 1, "deny": 2, "skip": 3 } template_id = template_map.get(template) if not template_id: print(f"无效的模板名称: {template}") return # 构建收件人列表 to = [{"email": recipient["email"], "name": recipient["name"]}] # 模板变量(如果你的模板中有动态字段,比如{{name}}、{{message}}等,在这里传入) params = custom_params or {} # 创建邮件对象,指定模板ID send_smtp_email = sib_api_v3_sdk.SendSmtpEmail( to=to, reply_to=reply_to, headers=headers, sender=sender, template_id=template_id, # 关键:指定模板ID params=params # 传递模板中的动态变量 ) try: # 发送邮件 api_response = api_instance.send_transac_email(send_smtp_email) pprint(api_response) print("邮件发送成功") except ApiException as e: print(f"调用API时出错: {e}\n") # 示例调用:发送approve模板给指定收件人 if __name__ == "__main__": test_recipient = {"email":"example@example.com","name":"Jane Doe"} # 如果模板中有动态变量,比如{{custom_message}},可以传入参数 send_email("approve", test_recipient, {"custom_message": "你的申请已通过"})
关键修改说明
- 指定模板ID:在
SendSmtpEmail中添加template_id参数,对应你在SendinBlue平台创建的模板ID(确保ID和平台上的一致) - 移除冗余参数:不再需要
html_content和subject,因为模板已经包含这些内容;如果需要动态覆盖模板主题,可以保留subject参数 - 完善send_email函数:让函数接收模板名称、收件人信息和自定义参数,内部完成邮件对象构建和发送逻辑
- 模板变量传递:通过
params参数传递模板中的动态占位符(比如模板里的{{user_name}},就可以在params中传入{"user_name": "张三"})
注意事项
- 确保你的API密钥有足够的权限发送事务邮件
- 确认模板ID和平台上创建的模板完全匹配(可以在SendinBlue后台的模板列表中查看ID)
- 如果模板中有必填的动态变量,必须在
params中传入对应的键值对,否则邮件可能无法正常渲染
内容的提问来源于stack exchange,提问作者Abdeali Diwan
相关产品推荐
相关产品推荐

