使用 Ruby 脚本发送电子邮件 - 501 5.5.4 无效地址

Posted

技术标签:

【中文标题】使用 Ruby 脚本发送电子邮件 - 501 5.5.4 无效地址【英文标题】:Sending email with a Ruby script - 501 5.5.4 Invalid Address 【发布时间】:2010-11-15 02:41:46 【问题描述】:

我正在尝试使用 Ruby 脚本发送电子邮件,但我的概念证明不起作用。我可以 telnet 到邮件服务器并以这种方式发送邮件,但是此脚本会导致邮件服务器引发错误:501 5.5.4 Invalid Address

#!/usr/bin/ruby

require 'net/smtp'

def send_email(to, subject = "", body = "")
    from = "my@email.com"
    body= "From: #from\r\nTo: #to\r\nSubject: #subject\r\n\r\n#body\r\n"

    Net::SMTP.start('192.168.10.213', 25, '192.168.0.218') do |smtp|
        smtp.send_message body, from, to
    end
end

send_email "my@email.com", "test", "blah blah blah"

在我的实际脚本中,my@email.com 是一个有效的电子邮件。 192.168.10.213 是邮件服务器,192.168.0.218 是我的本地 IP。注意我运行的是windows xp,邮件服务器是交换服务器。

我不明白为什么 telnet 使用相同的值,但是这个脚本会引发无效地址错误。

有人可以帮帮我吗?

编辑:上面的代码现在可以正常工作了,我最初在最终方法调用中省略了逗号。我觉得自己像个白痴。

【问题讨论】:

【参考方案1】:

确保您的实际电子邮件地址不包含无效字符。例如,请参阅this question。

【讨论】:

谢谢,但我的机器名称和电子邮件地址都是完全有效的,没有奇数字符,没有前导或尾随空格或点。不过,我的机器名称中确实有一个破折号……更改我的计算机名称很麻烦,因为我在公司网络中。破折号可能是问题吗?记住,telnet 有效! 破折号应该没问题,尽管下划线对域无效。您可能需要查看 SMTP 流量以了解服务器实际看到的内容 - 它可能与您认为的不同。【参考方案2】:

我推荐Action Mailer 使用 Ruby 发送邮件。见 sn-p here。

【讨论】:

我宁愿使用 Net::SMTP ... 我不需要那些爵士乐。使用任何不在 ruby​​ 核心中的东西是我最后的手段(即 Action Mailer 或 TMail 或类似的)【参考方案3】:

你能相信吗?我觉得自己像个白痴,我只是在方法调用中缺少逗号......

send_email "my@email.com", "test", "blah blah blah"

我很尴尬。

不管怎样,如果有人感兴趣,上面的代码就很好用。只是不要像我一样省略逗号。

【讨论】:

【参考方案4】:

您的代码中存在错误。恶意用户可以通过在主题中使用换行符在您的电子邮件中插入更多标头。

【讨论】:

好收获。此代码仅用作一次性批处理作业的本地运行脚本,因此我没有考虑这种安全性。不过对于可能想要使用此代码的其他人来说,这仍然是一个好点。谢谢。

以上是关于使用 Ruby 脚本发送电子邮件 - 501 5.5.4 无效地址的主要内容,如果未能解决你的问题,请参考以下文章

ruby Ping一个电子邮件地址以查看它是否存在。此脚本解析MX记录以查找负责向广告发送邮件的SMTP服务器

如何使用 Ruby 的邮件 gem 通过 smtp 发送电子邮件?

在 Rails 开发环境 smtp cpanel 上发送电子邮件 ruby

Ruby Net::SMTP - 使用密件抄送发送电子邮件:收件人

Mandrill 在 Rails 上发送电子邮件 ruby

如何使用 Actionmailer/Ruby on Rails 发送具有多个动态 smtp 的电子邮件