You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl Net::SMTP发送邮件至自身时跳过收件箱问题求助

问题描述

我用Google账号的“应用密码”,通过Perl的Net::SMTP模块给自己发Gmail,但发送方、接收方和验证账号都是同一个Google账号时,邮件只会出现在已发送箱,不会进入收件箱,也收不到通知。想知道怎么让邮件正常进收件箱并触发通知?

环境信息

  • 操作系统:Windows 10 + WSL + Ubuntu 22.04.4 LTS
  • 开发语言:Perl 5.34.0

当前使用的代码

#!/usr/bin/perl -w

use Net::SMTP;

$user = 'my_mail_at_gmail_dot_com';
$pass = 'application password string';
$sender = 'my_mail_at_gmail_dot_com';
$receiver = 'my_mail_at_gmail_dot_com';

$smtp = Net::SMTP->new('smtp.gmail.com',
                       Port => 587,
                       Timeout => 30,
                       Debug => 1,
                       #Debug => 0,
                      );

$smtp->starttls();
$smtp->auth($user, $pass);
$smtp->mail($sender);
$smtp->to($receiver);

$smtp->data();
while(my $data = <DATA>){
  $smtp->datasend($data);
}
$smtp->dataend();
$smtp->quit;

__DATA__
Subject: mail testing
From: NEW_NEWS <my_mail_at_gmail_dot_com>
mail test
解决办法

Gmail默认会把同一账号发给自己的邮件直接归到已发送文件夹,不会进收件箱。可以试试以下几种方法:

1. 添加特殊邮件头

在邮件的__DATA__部分添加X-Forwarded-For头,模拟外部发送的邮件:

Subject: mail testing
From: NEW_NEWS <my_mail_at_gmail_dot_com>
X-Forwarded-For: external-sender@example.com
mail test

2. 使用非关联的发件人别名

把From字段改成一个和当前Gmail账号无关的邮箱(不需要真实存在),比如:

From: 系统通知 <notify@myapp.com>

这样Gmail会更倾向于把邮件当成外部邮件,送入收件箱。

3. 改用密送(BCC)发送

把代码里的$smtp->to($receiver);改成$smtp->bcc($receiver);,用密送的方式给自己发邮件,可能绕过Gmail的同一账号检测。

4. 设置Gmail过滤器

手动在Gmail里创建过滤器:

  • 过滤条件:填你发送邮件的主题关键词或者发件人邮箱
  • 操作:勾选“不要将其归档”,并可以设置“标记为重要”,确保邮件进入收件箱。不过这种方法需要手动配置,不如修改代码灵活。
验证步骤

修改代码后发送测试邮件,先检查收件箱是否收到,再确认通知是否触发。如果没找到,去垃圾邮件文件夹看看,必要时把发件人加入白名单。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:03:36