You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Bash邮件脚本中用Linux date命令生成合法邮件日期头

用Linux date命令生成符合规范的邮件日期头

嘿,这个问题我太熟了!写邮件脚本的时候,Date头的格式可是有严格要求的——必须符合RFC 5322规范,不然邮件服务器可能不认,甚至直接扔去垃圾邮件箱。好在Linux的date命令就能直接搞定,给你一步步说:

核心命令(GNU Date,绝大多数Linux发行版适用)

最简单的方式就是直接用date的内置RFC格式输出:

date -R

它会直接输出类似这样的标准结果:

Wed, 15 Nov 2023 14:30:00 +0800

如果你想手动指定格式(更灵活,方便自定义调整),可以用这个命令:

date "+%a, %d %b %Y %T %z"

格式符拆解:

  • %a:缩写的英文星期几(比如Wed
  • %d:补零的两位数字日期(比如05
  • %b:缩写的英文月份名称(比如Nov
  • %Y:四位完整年份(比如2023
  • %THH:MM:SS格式的时间
  • %z:带符号的时区偏移(比如+0800,对应东八区)

在Bash脚本里的用法

把生成的日期赋值给变量,然后插入到邮件头里就行:

# 生成符合规范的日期
MAIL_DATE=$(date -R)

# 写入邮件头(比如追加到邮件文件)
echo "Date: $MAIL_DATE" >> my_email.txt

特殊需求处理

  • 需要UTC时区的日期:如果你的邮件要求用UTC时间,加上-u参数即可:
    date -u -R
    # 输出示例:Wed, 15 Nov 2023 06:30:00 +0000
    
  • BSD Date(比如macOS环境):如果是在BSD系系统上,date的参数略有不同,手动格式需要调整时区的输出(去掉冒号):
    date -j -f "%Y-%m-%d %H:%M:%S" "$(date "+%Y-%m-%d %H:%M:%S")" "+%a, %d %b %Y %T %z" | sed 's/\([+-][0-9][0-9]\):\([0-9][0-9]\)/\1\2/'
    

关键注意事项

  • 一定要严格遵循RFC 5322格式,包括逗号、空格的位置,缩写的星期和月份必须是英文(比如Wed不能写成周三
  • 时区偏移必须准确,date会自动读取系统时区,如果你需要固定时区,可以先设置TZ环境变量,比如:
    TZ="America/New_York" date -R
    

内容的提问来源于stack exchange,提问作者SeamusJ

火山引擎 最新活动