【问题标题】:Troubles with emails started with "-"(dash)以“-”(破折号)开头的电子邮件问题
【发布时间】:2012-11-22 15:24:04
【问题描述】:

我们有 Ruby On Rails 应用程序和一些电子邮件订阅。它具有从 ActionMailer 继承的邮件程序类:

class UserMailer < ActionMailer::Base
...
end

一切正常,除了一件事 - 一些用户的电子邮件地址以“-”开头。 当我尝试向“-user@mailinator.com”发送电子邮件时出现错误:

sendmail: invalid option -- u
sendmail: invalid option -- s
sendmail: invalid option -- u
sendmail: fatal: usage: sendmail [options]

我怎样才能为 ActionMailer 转义这个角色(可能还有一些类似的角色)?

谢谢

【问题讨论】:

  • 你需要转义这个特殊字符,因为它是所有 bash/shell 命令中的选项字符
  • 许多 unix 命令在 -- 参数之后停止解析参数。也许你可以重新配置 sendmail 调用代码来做到这一点?
  • 感谢您的建议。我尝试添加一些转义: - 添加 ` and additional "` 或 ' 没有帮助(发送到 "\"-user@mailinator.com\""、"\-user@mailinator.com" 和 " -\'user@mailinator.com\'" 已发送,但 "-user@mailinator.com" 的收件箱仍然为空) - 添加 / 意外有帮助:电子邮件发送到 "/-user@mailinator.com" 并发送到“-user@mailinator.com”。我也会尝试在应用程序中覆盖 sendmail 方法。
  • 这应该是 Github 上的问题 - 它应该转义这些字符,尽管它仅在 config.delivery_method 为 :sendmail 时出现 - 使用 :sendmail 仍然是一个 rails-core .. 或者实际上是 ActionMailer。 .

标签: ruby-on-rails actionmailer


【解决方案1】:

URI.escape 方法虽然已被弃用,但确实需要第二个参数,让您可以像这样标记不安全的内容

URI.escape("-user@mailinator.com", '-')
=> "%2Duser@mailinator.com"

替换 URI.escape 的 CGI 转义似乎没有相同的功能,但对于像这样的单个情况,它可能会起作用。

【讨论】:

    猜你喜欢
    • 2018-02-02
    • 2018-06-05
    • 1970-01-01
    • 2011-05-16
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2016-03-07
    相关资源
    最近更新 更多