程序员式浪漫:每天8点,她都会收到一句来自我的英文早安

12 阅读4分钟

上篇发了《PHP定时发送邮件》之后,有读者问:

“每天的句子还要自己配?有没有自动获取的?”
“有没有那种每天不一样的,不用我手动改?”

有的。

这次我升级了一下——接入了金山词霸的开放接口,每天自动获取最新的一句英文+中文翻译。

你只需要改收件人邮箱,其他什么都不用管。

f0816c2c-c8dd-4c7a-82a7-da279c8a72b0.png

一、最终效果

每天早上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"
    }
}

核心逻辑只有三步:

  1. 调用金山词霸API,获取今日句子
  2. 组装成好看的HTML邮件
  3. 发送 + 记录日志

四、配置指南(改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 * * * * 但延迟执行

八、一点小感悟

写了这个脚本之后,我发现:

技术最浪漫的地方,不是它有多酷,而是它能帮你「坚持」。

你可能没办法每天准时准点给喜欢的人发消息,但你的代码可以。

她可能知道这是自动发的,但收到的那一刻,还是会点开看看今天是什么句子。

这大概就是程序员的方式吧。


完整代码已贴在上面,复制改一下邮箱就能用。

评论区聊聊:你想把这个发给谁?