VirtualBox桥接网络模式下Python调用smtplib发送邮件遇SMTP错误
解决桥接模式下KDE虚拟机无法通过Python smtplib连接Gmail SMTP的问题
看起来你在桥接模式的KDE虚拟机里用Python的smtplib连接Gmail SMTP时遇到了连接失败的问题,我来给你梳理几个最可能的原因和对应的解决办法:
1. 先检查SMTP服务器地址是否正确
你代码里写的是smtp.gmail.de,但Gmail官方的SMTP服务器地址应该是smtp.gmail.com——这大概率是个笔误,先把地址改过来再测试,很多时候这类连接问题都是地址写错导致的。
2. 排查网络层面的连接障碍
因为用的是桥接模式,虚拟机相当于局域网里的独立设备,需要检查两端的防火墙是否拦截了587端口的出站请求:
- 虚拟机的防火墙:KDE所在的Linux系统可能开启了防火墙,阻止了587端口的连接。你可以临时关闭防火墙测试,比如用
sudo systemctl stop firewalld(如果用的是firewalld)或者sudo ufw disable(如果是ufw)。如果关闭后能成功连接,记得再添加允许587端口出站的规则(比如sudo ufw allow out 587/tcp)。 - Win10主机的防火墙:主机的防火墙也可能拦截虚拟机的出站请求。你可以临时关闭Win10的防火墙(设置→更新和安全→Windows安全中心→防火墙和网络保护),测试能不能连接。如果有效,再在防火墙的出站规则里添加允许虚拟机访问587端口的规则。
- 先做基础连接测试:不用Python,在虚拟机的终端里用
telnet smtp.gmail.com 587测试能不能连接到服务器。如果telnet提示无法连接,说明是网络层面的问题,先解决网络再看代码;如果能连接,再排查代码和Gmail的设置。
3. 调整Gmail的账号安全设置
Gmail现在对SMTP登录有严格的限制,需要根据你的账号情况调整:
- 如果开启了两步验证:你不能直接用账号密码登录SMTP,必须去Google账号的“安全性”设置里生成一个应用专用密码(App Password),用这个密码代替原来的账号密码在代码里登录。
- 如果没开启两步验证:现在Gmail个人账号已经移除了“允许不太安全的应用”选项,你需要改用OAuth2验证方式,或者考虑切换到其他支持简单SMTP登录的邮箱服务商(比如Outlook、QQ邮箱)来测试。
修正后的测试代码
这里给你一个调整后的示例代码,你可以参考:
import smtplib from email.mime.text import MIMEText def send_test_email(): try: # 正确的Gmail SMTP地址 server = smtplib.SMTP('smtp.gmail.com', 587) # 启用TLS加密 server.starttls() # 如果是两步验证用户,这里填应用专用密码 server.login('your_gmail_address@gmail.com', 'your_app_password_or_account_password') # 构造邮件内容 msg_content = '这是来自KDE虚拟机的测试邮件' msg = MIMEText(msg_content, 'plain', 'utf-8') msg['Subject'] = '桥接模式SMTP测试' msg['From'] = 'your_gmail_address@gmail.com' msg['To'] = 'recipient_email@example.com' # 发送邮件 server.sendmail(msg['From'], [msg['To']], msg.as_string()) print('邮件发送成功!') except Exception as e: print(f'发送失败:{str(e)}') finally: # 关闭连接 server.quit() send_test_email()
内容的提问来源于stack exchange,提问作者baumiksdeh
相关产品推荐
相关产品推荐

