上篇发了《PHP定时发送邮件》之后,有读者问:
“每天的句子还要自己配?有没有自动获取的?”
“有没有那种每天不一样的,不用我手动改?”
有的。
这次我升级了一下——接入了金山词霸的开放接口,每天自动获取最新的一句英文+中文翻译。
你只需要改收件人邮箱,其他什么都不用管。
一、最终效果
每天早上8点,对方会收到一封精心排版的邮件:
每天都是不一样的句子,今天这句来自金山词霸,明天又是新的一句。
主打一个「新鲜感」——她不知道今天会收到什么,但每天都会有一句。
二、这次升级了什么?
| 对比项 | 上篇(手动版) | 这篇(接口版) |
|---|---|---|
| 句子来源 | 自己配词库 | 金山词霸API自动获取 |
| 维护成本 | 需要手动加句子 | 零维护 |
| 句子质量 | 取决于你自己 | 专业词库,每日更新 |
| 代码量 | 60行 | 还是60行(没变) |
核心改变:
// 之前:手动从数组里取
$sentence = $daily_sentences[$today];
// 现在:从接口自动获取
$result = httpRequest('http://open.iciba.com/dsapi/');
三、完整代码(复制就能用)
整个脚本加上注释,不到80行。
完整代码: (贴上面我给你的最终版)
<?php
/**
* 自动发送每日一句邮件脚本(PHP版)
* 数据来源:金山词霸开放接口 http://open.iciba.com/dsapi/
* 功能:每天自动获取最新一句,发送到指定邮箱
*/
use dali\Send;
include "src/Send.php";
// ========== 配置区域(改这里就行)==========
$config = [
'email' => '你的邮箱@qq.com', // 发件邮箱
'auth_code' => '你的授权码', // QQ邮箱授权码
'send_name' => '爱你的张三', // 发件人昵称
'to_users' => ['xiaomei@qq.com'], // 收件人(支持多个)
'title' => '每日一句|金山词霸', // 邮件标题
'api_url' => 'http://open.iciba.com/dsapi/', // 每日一句接口
];
// ========================================
/**
* HTTP请求函数(支持GET/POST)
*/
function httpRequest($url, $data = [])
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 30秒超时
if (!empty($data)) {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, is_array($data) ? json_encode($data) : $data);
}
$res = curl_exec($curl);
$error = curl_error($curl);
curl_close($curl);
if ($error) {
return ['errorno' => false, 'errmsg' => $error];
}
return json_decode($res, true);
}
/**
* 获取每日一句
*/
function getDailySentence($apiUrl)
{
$result = httpRequest($apiUrl);
if (!$result || isset($result['errorno'])) {
// 接口挂了就用备用内容
return [
'content' => "Every day is a new beginning.",
'note' => "每一天都是新的开始。",
'from' => '备用词库'
];
}
return [
'content' => $result['content'] ?? 'Keep going.',
'note' => $result['note'] ?? '继续前行。',
'from' => '金山词霸'
];
}
// ========== 主流程 ==========
// 1. 获取今日句子
$sentence = getDailySentence($config['api_url']);
// 2. 组装邮件内容(支持HTML格式)
$content = "<div style='font-family: Arial, sans-serif; padding: 20px; max-width: 600px;'>";
$content .= "<h2>✨ 早安,又是美好的一天 ✨</h2>";
$content .= "<div style='background: #f5f5f5; padding: 20px; border-radius: 10px; margin: 20px 0;'>";
$content .= "<p style='font-size: 18px; color: #333;'><strong>🇬🇧 英文:</strong>{$sentence['content']}</p>";
$content .= "<p style='font-size: 16px; color: #666;'><strong>🇨🇳 中文:</strong>{$sentence['note']}</p>";
$content .= "<p style='font-size: 12px; color: #999; margin-top: 15px;'>📖 来源:{$sentence['from']}</p>";
$content .= "</div>";
$content .= "<p style='color: #888;'>—— 每天进步一点点,{$config['send_name']}</p>";
$content .= "</div>";
// 3. 发送邮件
$send = new Send([$config['email'], $config['auth_code']]);
$ret = $send->send(
$config['send_name'],
$config['to_users'],
$config['title'],
$content
);
// 4. 记录日志
$log = "[" . date("Y-m-d H:i:s") . "] ";
$log .= $ret ? "✅ 发送成功 - {$sentence['content']}" : "❌ 发送失败";
file_put_contents(__DIR__ . "/email.log", $log . PHP_EOL, FILE_APPEND);
// 5. 命令行输出(配合crontab使用)
echo $log . PHP_EOL;
compose.json文件
{
"name": "zhanglili/send_email",
"description": "send email",
"autoload": {
"psr-4": {
"Zhanglili\\SendEmail\\": "src/"
}
},
"authors": [
{
"name": "zhangli",
"email": "1048447843@qq.com"
}
],
"require": {
"phpmailer/phpmailer": "^6.7"
}
}
核心逻辑只有三步:
- 调用金山词霸API,获取今日句子
- 组装成好看的HTML邮件
- 发送 + 记录日志
四、配置指南(改3个地方)
你只需要修改开头的配置区域:
$config = [
'email' => '你的邮箱@qq.com', // 改成你的QQ邮箱
'auth_code' => '你的授权码', // QQ邮箱设置里拿
'send_name' => '爱你的张三', // 改成你的名字
'to_users' => ['对方邮箱@qq.com'], // 改成她的邮箱
'title' => '每日一句|金山词霸', // 标题随意
];
关于「授权码」:
- QQ邮箱 → 账号与安全→安全设置 → 开启POP3/SMTP服务 → 获取16位授权码
- 不是你的登录密码
五、设置定时发送
Linux/Mac(crontab):
crontab -e# 每天早上8点发送0 8 * * * php /你的路径/send_email.php >> /var/log/email.log 2>&1
Windows(任务计划程序):
schtasks /create /tn "DailyEmail" /tr "php D:\path\send_email.php" /sc daily /st 08:00
没有服务器?
- 可以用免费的「阿里云函数」或「腾讯云函数」
- 或者买个最便宜的云服务器,一年几十块钱
腾讯云2核2G4M(curl.qcloud.com/Fy7gc47T)
六、金山词霸API返回的数据
接口返回的完整数据长这样(我今天刚调的):
{
"content": "The smell of wet earth brings peace to the heart.",
"note": "雨后泥土的气息让人心安。",
"dateline": "2026-05-06",
"tts": "https://...mp3"
}
甚至还有音频链接**——如果你想做成「每日一句+发音」,可以再加个功能。**
七、进阶玩法
基于这个接口,你还可以扩展:
| 玩法 | 改动点 | 效果 |
|---|---|---|
| 加音频 | 邮件里嵌入 $result['tts'] | 对方可以听发音 |
| 加配图 | 邮件里嵌入 $result['picture'] | 邮件更美观 |
| 多收件人 | to_users 数组多加几个 | 群发给朋友/团队 |
| 企业微信版 | 改推送渠道 | 发到群里 |
| 随机时间 | 每天8-9点随机 | 更有「真人感」 |
比如这样改:
// 随机在8:00-9:00之间发送
$minute = rand(0, 59);
// crontab: 8 * * * * 但延迟执行
八、一点小感悟
写了这个脚本之后,我发现:
技术最浪漫的地方,不是它有多酷,而是它能帮你「坚持」。
你可能没办法每天准时准点给喜欢的人发消息,但你的代码可以。
她可能知道这是自动发的,但收到的那一刻,还是会点开看看今天是什么句子。
这大概就是程序员的方式吧。
完整代码已贴在上面,复制改一下邮箱就能用。
评论区聊聊:你想把这个发给谁?