pip install sendgrid==6.9.6
Content
对象来包含不同语言的文本:from sendgrid.helpers.mail import Mail
message = Mail(
from_email='from@example.com',
to_emails='to@example.com',
subject='多语言邮件测试',
html_content='这是一封中文邮件。
This is an English email.
'
)
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const msg = {
to: 'to@example.com',
from: 'from@example.com',
subject: '多语言模板邮件',
templateId: 'd-1234567890',
dynamicTemplateData: {
content: '这是模板中的动态内容。'
}
};
sgMail.send(msg);
from flask import Flask, request
app = Flask(__name__)
@app.route('/event', methods=['POST'])
def event_webhook():
event = request.json[]
if event['event'] == 'delivered':
print('邮件已送达')
elif event['event'] == 'open':
print('邮件已打开')
elif event['event'] == 'click':
print('链接已点击')
return {'status': 'ok'}
if __name__ == '__main__':
app.run(debug=True)
const express = require('express');
const app = express();
app.use(express.json());
app.post('/event', (req, res) => {
const event = req.body[];
switch (event.event) {
case 'delivered':
console.log('邮件已送达');
break;
case 'open':
console.log('邮件已打开');
break;
case 'click':
console.log('链接已点击');
break;
}
res.status().send('ok');
});
app.listen(, () => {
console.log('Webhook 服务启动');
});
const crypto = require('crypto');
app.post('/event', (req, res) => {
const signature = req.headers['x-twilio-email-event-webhook-signature'];
const timestamp = req.headers['x-twilio-email-event-webhook-timestamp'];
const body = JSON.stringify(req.body);
const hmac = crypto.createHmac('sha256', process.env.SENDGRID_WEBHOOK_SECRET);
const digest = hmac.update(timestamp + body).digest('hex');
if (digest === signature) {
// 处理事件
res.status().send('ok');
} else {
res.status().send('签名验证失败');
}
});
import asyncio
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
async def send_email_async():
message = Mail(
from_email='from@example.com',
to_emails='to@example.com',
subject='异步邮件测试',
html_content='这是一封异步发送的邮件。
'
)
try:
sg = SendGridAPIClient(api_key=os.environ.get('SENDGRID_API_KEY'))
response = await sg.send(message)
print(response.status_code)
except Exception as e:
print(e)
asyncio.run(send_email_async())
require 'vendor/autoload.php';
use SendGrid\Mail\Mail;
use SendGrid\SendGrid;
$apiKey = getenv('SENDGRID_API_KEY');
$sg = new SendGrid($apiKey);
$message = new Mail();
$message->setFrom('from@example.com', '发件人');
$message->setSubject('批量邮件测试');
$personalization = new \SendGrid\Mail\Personalization();
$personalization->addTo('to1@example.com', '收件人1');
$personalization->addTo('to2@example.com', '收件人2');
$personalization->addDynamicTemplateData('content', '这是批量邮件的内容。');
$message->addPersonalization($personalization);
$message->setTemplateId('d-1234567890');
try {
$response = $sg->send($message);
print $response->statusCode() . "\n";
} catch (Exception $e) {
echo 'Caught exception: ' . $e->getMessage() . "\n";
}
message = Mail(
from_email='from@example.com',
to_emails='to@example.com',
subject='测试邮件',
html_content='这是一封 UTF-8 编码的邮件。
'
)
这是一封 UTF-8 编码的邮件。
'📌 先搞懂:GPTZero 到底能干嘛? 想知道怎么用 GPTZero 检测 GPT-4 生成的内容,得先明白这工具的核心逻辑。GPTZero 是专门用来识别文本是否由 AI 生成的工具,它的原理主
📱 移动端 APP 的 AI 痕迹检测基础 如今 AI 技术越来越普及,很多内容可能是 AI 生成的,像文章、图片等。那怎么用手机 APP 检测这些内容是不是 AI 生成的呢? 先得了解下 AI 生
在公众号排版领域,秀米和 135 编辑器是两款备受关注的工具。不少人纠结于它们的模板库,尤其是创意和独特性。今天咱们就好好唠唠这两款编辑器的模板库,看看谁更胜一筹。 🌟 设计风格:清新文艺 vs 多
公众号运营者谁不想靠着变现项目快速赚钱呢?可那些看似诱人的机会,往往藏着大坑。今天就来扒一扒这些陷阱,给你一份避坑指南。📢 广告合作里的 “高佣金” 陷阱有些广告商特别会来事,一上来就跟你说他们
想做公众号的新手们,是不是一打开后台就头大?不知道从哪儿下手,更别说写出让人眼前一亮的文章了。别慌,今天就手把手带你走完从账号定位到产出第一篇爆款的全流程,全是实战干货,照着做至少能少走半年弯路。�
🧠 AI 学习文风的底层逻辑:从数据到表达的转化密码 想搞懂 AI 怎么学文风,得先看它的 "学习材料"。现在主流的大模型,比如 GPT 系列、文心一言,都是靠海量文本喂出来的。这些文本涵盖了从小说
不少同学都遇到过这种情况:自己用某款查重软件查完论文,重复率明明达标了,可学校正式查重时却超出了规定范围。这种自查和学校查重结果不一致的情况,真的能让人瞬间慌了神。其实不用太焦虑,这种现象很常见。下面
📌 先搞懂 AI 原创检测的底层逻辑现在市面上的 AI 检测工具,比如朱雀、GPTZero 这些,它们判断内容是不是 AI 写的,主要看两个东西:文本的规律性和语义的连贯性。AI 生成的内容往往有