Laravel 9中使用Mailchimp实现下单后自动发送交易邮件
在Laravel 9中通过Mailchimp Transactional API发送购买确认邮件
以下是完整的实现流程,基于你已持有Mailchimp Transactional API密钥的前提:
1. 配置环境变量
在项目根目录的.env文件中添加API密钥配置:
MAILCHIMP_TRANSACTIONAL_APIKEY=你的Mailchimp交易API密钥
注意:请求地址中的us12需要替换为你Mailchimp账号对应的服务器前缀(可在Mailchimp后台API设置页查看)。
2. 编写邮件发送逻辑
将以下代码嵌入到订单完成的业务流程中(比如支付成功回调、订单创建完成的控制器方法):
use Illuminate\Support\Facades\Http; // 示例变量,实际需从订单流程中获取 $customerEmail = 'customer@example.com'; $orderDetails = [ 'firstName' => '张', 'lastName' => '三', 'orderId' => 'ORD-20240520-001', 'totalAmount' => 199.99, 'businessName' => '帝国网络', 'businessNature' => '互联网服务', 'customerPhone' => '13800138000' ]; $products = [ [ 'productName' => '年度会员套餐', 'productPrice' => 199.99 ] ]; // 调用Mailchimp API发送邮件 $response = Http::withHeaders([ 'Authorization' => 'Basic ' . base64_encode('apikey:' . env('MAILCHIMP_TRANSACTIONAL_APIKEY')), 'Content-Type' => 'application/json', ])->post('https://us12.api.mailchimp.com/3.0/messages/send', [ 'message' => [ 'subject' => '购买确认邮件', 'from_email' => 'info@imperialinternet.com', 'to' => [ ['email' => $customerEmail], ], 'html' => view('emails.purchase_confirmation', compact('orderDetails', 'products'))->render(), // 可选:添加纯文本版本,适配不支持HTML的邮件客户端 'text' => "尊敬的{$orderDetails['firstName']}{$orderDetails['lastName']},感谢您的购买!\n订单ID:{$orderDetails['orderId']}\n总金额:${$orderDetails['totalAmount']}" ], ]); // 可选:处理API响应 if ($response->successful()) { // 邮件发送成功,可记录日志或执行后续逻辑 } else { // 邮件发送失败,记录错误信息 $errorInfo = $response->json(); \Log::error('Mailchimp邮件发送失败', $errorInfo); }
3. 创建邮件视图模板
在resources/views/emails/目录下新建purchase_confirmation.blade.php文件,内容如下:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>购买确认</title> <style> body { font-family: Arial, sans-serif; line-height: 1.6; max-width: 600px; margin: 0 auto; padding: 20px; } h1, h2 { color: #2c3e50; } p { margin: 8px 0; } </style> </head> <body> <h1>购买确认</h1> <p>尊敬的 {{ $orderDetails['firstName'] }} {{ $orderDetails['lastName'] }}:</p> <p>感谢您的购买!以下是您的订单详情:</p> <h2>订单信息</h2> <p><strong>订单ID:</strong> {{ $orderDetails['orderId'] }}</p> <p><strong>总金额:</strong> ${{ $orderDetails['totalAmount'] }}</p> <!-- 可补充下单时间、支付方式等信息 --> <h2>商家信息</h2> <p><strong>商家名称:</strong> {{ $orderDetails['businessName'] }}</p> <p><strong>商家类型:</strong> {{ $orderDetails['businessNature'] }}</p> <!-- 可补充商家地址、联系方式等信息 --> <h2>客户信息</h2> <p><strong>联系邮箱:</strong> {{ $orderDetails['customerEmail'] }}</p> <p><strong>联系电话:</strong> {{ $orderDetails['customerPhone'] }}</p> <!-- 可补充收货地址等信息 --> <h2>产品详情</h2> @foreach ($products as $product) <p><strong>产品名称:</strong> {{ $product['productName'] }}</p> <p><strong>产品价格:</strong> ${{ $product['productPrice'] }}</p> <!-- 可补充产品规格、数量等信息 --> @endforeach </body> </html>
提示:如果希望模板中使用
$order而非$orderDetails,只需将代码中的compact('orderDetails', 'products')改为['order' => $orderDetails, 'products' => $products]即可。
关键注意事项
- 服务器前缀替换:必须将请求地址中的
us12换成你自己Mailchimp账号对应的服务器编号,否则API请求会失败。 - 依赖引入:确保控制器顶部已引入
Illuminate\Support\Facades\Http。 - 错误处理:建议保留响应判断逻辑,避免邮件发送失败时无感知,可将错误信息写入日志。
- 响应式适配:邮件模板添加基础样式,确保在手机、邮箱客户端中显示正常。
内容的提问来源于stack exchange,提问作者hassan javaid
相关产品推荐
相关产品推荐

