ruby on rails mailer and non-unicode domain (.рф)



我的rails应用程序使用俄罗斯cyrrylic域名(.рф(,那里我有mailer,其中我有来自节的默认值。。。

像这样:

  default from: "noreply@портал.рф"

邮件的某些部分:

class CarMailer < ActionMailer::Base
  default from: "noreply@портал.рф"

  def send_car_question_back(question_text, question_email, question_phone, car_user, car)
    ****
    mail(to: @question_email, subject: "***")
  end
end

但在我的邮箱里noreply@blablabla带有一些strane号码(如垃圾邮件:(

有没有什么方法可以发送邮件,并将发件人设置为cyryllic格式?

在env-confg中我有:

config.action_mailer.smtp_settings =  {
    :enable_starttls_auto => false,
    :address        => 'localhost',
    :port           => 25,
    :domain         => 'xn----7s454545*****i',
    :authentication => :login,
    :content_type   => "text/html",
    :user_name      => 'noreply@xn----7s454545*****i',
    :password       => '*****'
  }
  config.action_mailer.default_url_options = { :host => 'xn----7s454545*****i' }

'xn----7s454545*****i'是cyrillic域的普通域编码,正好是非ASCII域的编码。在RFC 3490中描述了域名转换方法。

您的邮箱不支持非ASCII域转换。因此,您可以尝试将mailer设置中的域名设置为cyrillic域名,并使用IDNA转换宝石将其转换为ASCII形式:

  1. 对于ruby-1.8,它是idn宝石。

     require 'idn'
    

和环境配置:

    config.action_mailer.smtp_settings =  {
      #...
      :domain         => IDN::Idna.toASCII('портал.рф')
    }

反之亦然:

    puts 'Idna.toUnicode: ' + IDN::Idna.toUnicode('xn--rksmrgs-5wao1o.josefsson.org')
  1. 对于ruby-2.0,您必须使用simpleidngem。

     require 'idn'
     SimpleIDN.to_ascii("портал.рф")
     SimpleIDN.to_unicode("xn--mllerriis-l8a.com")
    

最新更新