sendmail发件人显示为xxx@localhost.localdomain的解决办法

本文介绍了在不同情况下如何通过修改hostname或指定发件人地址来设置邮件发件人标识的方法。包括一般情况下的修改、不修改hostname时的替代方法以及使用php内置函数发送邮件时的配置技巧。
大 | 中 | 小

1. 一般情况下,修改hostname即可,例如你修改hostname为aaaa.net.cn,并且以nobody用户发送信件,
发件人即显示为:nobody@aaaa.net.cn

2. 如果你不想修改hostname,也可以通过在命令行发送的时候指定发件人地址,例如:
echo -e "To: xxxx@gmail.com" | sendmail -f nobody@aaaa.net.cn -t -i

或者
echo -e "To: xxxx@gmail.com\nFrom: nobody@aaaa.net.cn" | sendmail -t

那么收件箱显示的发件人是nobody@aaaa.net.cn

3. 如果你是用php内置函数通过sendmail发送信件的话,可以在php.ini中修改:
sendmail_path = /usr/sbin/sendmail -f nobody@aaaa.net.cn -t -i

这样就可以了。

<think>由于用户意图是变更发件人邮箱(从163邮箱变更为QQ邮箱),需要解决在Python中使用QQ邮箱作为发件人的相关问题。通过搜索,以下是关键点: 1. QQ邮箱需要开启SMTP服务并获取授权码(不是邮箱密码)。 2. QQ邮箱的SMTP服务器地址为smtp.qq.com,端口为465(SSL)或587(TLS)。 3. 在代码中,需要将发件人邮箱地址、登录用户名、授权码以及服务器信息进行相应变更。 以下是具体步骤和代码示例: ### 变更发件人邮箱为QQ邮箱的步骤 **开启QQ邮箱的SMTP服务** 登录QQ邮箱,进入“设置”->“账户”,在“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”下,开启“POP3/SMTP服务”或“IMAP/SMTP服务”。开启时需要验证密保,然后获取16位授权码(授权码用于登录SMTP服务器)。 **修改Python发送邮件代码** 将之前的163邮箱配置替换为QQ邮箱的配置: - SMTP服务器:smtp.qq.com - 端口:465(推荐使用SSL)或587(使用TLS) - 用户名:完整的QQ邮箱地址(如xxx@qq.com) - 密码:使用获取的授权码 **代码示例** ```python import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header # QQ邮箱配置 SMTP_SERVER = "smtp.qq.com" SMTP_PORT = 465 # 使用SSL SENDER_EMAIL = "xxx@qq.com" # 发件人QQ邮箱 SENDER_PASSWORD = "16位授权码" # 授权码 RECIPIENT = "yyy@example.com" # 收件人邮箱 # 创建邮件 msg = MIMEMultipart() # 发件人显示格式:建议包含发件人名称和邮箱地址 msg['From'] = Header(f"发件人名称 <{SENDER_EMAIL}>", 'utf-8') msg['To'] = RECIPIENT msg['Subject'] = Header("测试邮件(QQ邮箱发送)", 'utf-8') # 邮件正文 body = MIMEText("<p>这是一封通过QQ邮箱发送的测试邮件</p>", "html", "utf-8") msg.attach(body) try: # 使用SMTP_SSL连接 with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as server: server.login(SENDER_EMAIL, SENDER_PASSWORD) server.sendmail(SENDER_EMAIL, [RECIPIENT], msg.as_string()) print("邮件发送成功") except Exception as e: print(f"发送失败: {e}") ``` **注意事项** - 发件人地址(`SENDER_EMAIL`)必须与登录的QQ邮箱地址一致。 - 显示发件人名称(`msg['From']`)可以自定义,但邮箱地址必须正确。 - 如果使用TLS,可将端口改为587,并使用`SMTP`对象并调用`starttls()`方法: ```python server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) server.starttls() server.login(SENDER_EMAIL, SENDER_PASSWORD) ``` ### 解决可能的问题 - **授权码问题**:确保使用正确的授权码(在QQ邮箱设置中生成)。 - **连接问题**:检查网络是否允许连接QQ邮箱的SMTP端口(465或587)。 - **垃圾邮件问题**:确保邮件内容合规,避免被识别为垃圾邮件。 §§相关问题§§: 1. 如何获取QQ邮箱的SMTP授权码? 2. QQ邮箱SMTP发送邮件被拒绝应如何解决? 3. 使用QQ邮箱发送邮件时如何避免被识别为垃圾邮件?</think>### 变更发件人邮箱为QQ邮箱的解决方案 **开启QQ邮箱SMTP服务** 登录QQ邮箱 → 设置 → 账户 → 开启"POP3/SMTP服务" → 通过手机验证获取16位授权码(非邮箱密码)[^1][^2] **修改Python代码配置** ```python # 变更以下配置项 SMTP_SERVER = "smtp.qq.com" # QQ邮箱服务器 SMTP_PORT = 465 # SSL加密端口 SENDER_EMAIL = "xxx@qq.com" # 新发件邮箱 SENDER_PASSWORD = "新获取的16位授权码" # 替换为QQ邮箱授权码 ``` **调整发件人显示格式** QQ邮箱要求严格匹配显示名称和实际邮箱地址: ```python msg['From'] = f"自定义名称 <{SENDER_EMAIL}>" # 必须包含尖括号格式 ``` **完整代码示例** ```python import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText # QQ邮箱配置 SMTP_SERVER = "smtp.qq.com" SMTP_PORT = 465 SENDER_EMAIL = "xxx@qq.com" SENDER_PASSWORD = "hxkkdhrnqabcdefg" # 16位授权码 RECIPIENT = "yyy@example.com" msg = MIMEMultipart() msg['From'] = f"系统通知 <{SENDER_EMAIL}>" # 关键格式 msg['To'] = RECIPIENT msg['Subject'] = "发件人变更测试" body = MIMEText("<p>此邮件通过QQ邮箱发送</p>", "html", "utf-8") msg.attach(body) try: with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as server: server.login(SENDER_EMAIL, SENDER_PASSWORD) server.sendmail(SENDER_EMAIL, [RECIPIENT], msg.as_string()) print("邮件发送成功") except Exception as e: print(f"错误: {str(e)}") ``` **关键注意事项** 1. 必须使用授权码而非QQ密码 2. 发件人显示格式必须为`"名称 <邮箱>"` 3. 首次使用需在手机QQ邮箱客户端激活SMTP服务 4. 单次发送收件人上限为50个地址 5. 每日发送限额200封邮件[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值