【问题标题】:Python Sending email using SMTP - target machine actively refused connectionPython使用SMTP发送电子邮件 - 目标机器主动拒绝连接
【发布时间】:2022-11-17 23:51:15
【问题描述】:

我正在尝试使用 Python 中的 smtplib 包在工作内部发送电子邮件。我正在使用 R 和 Spyder 的相同代理设置在 VPN 后面运行此脚本。 我使用以下代码改编自mkyoung.com

import smtplib

to = 'foo@foo-corporate.com'
corp_user = 'foo@foo-corporate.com'
corp_pwd = 'password'
smtpserver = smtplib.SMTP_SSL(local_hostname="smtp://foo-corporate.com", port = 25)
smtpserver.connect()

一旦我尝试最后一行smtpserver.connect(),我收到错误消息:

[WinError 10061] 由于目标机器主动拒绝,无法建立连接

这表明服务器不接受 SMTP 请求。 但是,如果我使用 Blastula package 在 R 中执行相同的脚本,它工作正常。 谁能建议我如何解决这个问题?

library(blastula)

create_smtp_creds_key(
  id = "email_creds",
  user = "foo@foo-corporate.com",
  host = "smtp://foo-corporate.com",
  port = 25,
  use_ssl = TRUE
)

email <-
  compose_email(
    body = md(" Hello, 
        This is a test email
        "))
  
# Sending email by SMTP using a credentials file
email %>%
  smtp_send(
    to = "foo@foo-corporate.com",
    from = "foo@foo-corporate.com",
    subject = "Testing the `smtp_send()` function",
    credentials = creds_key("email_creds")
  )




【问题讨论】:

  • 端口 25 很少是 SSL 端口。尝试不使用 ssl 进行连接。我不能说为什么它在 R 中有效,但这可能是由于 R 自动下降到无 ssl。
  • 谢谢@user99999 的快速回复,我试过了,但它给了我同样的问题。防火墙是否可以专门查看 Python 连接并阻止它们(我对这个话题知之甚少)
  • 是的,与@user99999 一样,我什至知道 ISP 会阻止端口 25 作为不安全端口并将这些请求转发到死端服务器。有时仍使用端口 465,但通常使用 587

标签: python r email


【解决方案1】:

我认为您缺少 ssl 上下文。 请试一试:

import smtplib, ssl

to = 'foo@foo-corporate.com'
corp_user = 'foo@foo-corporate.com'
corp_pwd = 'password'
port = 587
context = ssl.create_default_context()
smtp_server = smtplib.SMTP_SSL("smtp://foo-corporate.com", port, context=context)
smtp_server.connect()

我已经将端口更改为 587,如果它与 R 一起使用,也可以尝试 465 和 25

【讨论】:

    猜你喜欢
    • 2021-02-07
    • 1970-01-01
    • 2016-10-23
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多