@antivir

Ruby: как отправить русский email?

Приветствую!
Имею такой код:
# -*- coding: UTF-8 -*-
require 'net/smtp'
def send_email(to, subject, message,opts={})
  opts[:server] ||= 'smtp.mymail.ru'
  opts[:port] ||= 25
  opts[:domain] ||= "mail.from.domain"
  opts[:user_name] ||="user"
  opts[:password] ||= "password"
  opts[:authentication] ||="plain"
  opts[:from] ||= 'me@me.com'
  opts[:from_alias] ||= 'me'
  opts[:subject] ||= subject
  opts[:body] ||= message
  msg = <<END_OF_MESSAGE
From: #{opts[:from_alias]} <#{opts[:from]}>
To: <#{to}>
Subject: #{opts[:subject]}
Content-type: text/html
#{opts[:body]}
END_OF_MESSAGE
  Net::SMTP.start(opts[:server], opts[:port], opts[:domain], opts[:user_name], opts[:password], opts[:authentication]) do |smtp|
    smtp.send_message msg, opts[:from], to
  end
end

subject='Заголовок'
messages='Тело письма'
send_email('adresat@mymail.ru',subject, message)

Русский текст приходит абракадаброй.
  • Вопрос задан
  • 4544 просмотра
Пригласить эксперта
Ответы на вопрос 5
zizop
@zizop
Попробуйте гем pony. У нас через него русские письма отправляются на ура (и даже китайские).

require 'pony'

  Pony.mail(
    :to     => 'touser@site.com',
    :from    => 'fromuser@site.com,
    :subject   => '
mail subject',
    :headers   => headers,
    :body    => '
mail content',
    :charset   => '
utf-8',
    :via     => :smtp,
    :via_options => {
     :address      => '
smtp.site.com',
     :port        => '
25',
     :user_name     => '
no_reply@site.com',
     :password      => '
somepassword',
     :authentification  => :login,      # :plain, :login, :cram_md5, no auth by default
     :domain       => "site.com"   # the HELO domain provided by the client to the server
    }
  )


* This source code was highlighted with Source Code Highlighter.
Ответ написан
Комментировать
@mpetrunin
Конкретно по gem'у net-smtp ничего сказать не могу, но могу порекомендовать использовать gem mail: github.com/mikel/mail для этих целей. Никаких проблем с кодировкой и с отправкой.

Используется в Rails 3.

В принципе, можете посмотреть, как там решается проблема кодировок.
Ответ написан
MpaK999
@MpaK999
Буду!
Посмотрите заголовки какие приходят, попробуйте перекодировщик и еще добавить кодировку по умолчанию Content-type: text/html; charset=utf-8
Ответ написан
@inox
А если попробовать так:
messages = u'Тело письма'
Ответ написан
akzhan
@akzhan
попробуйте
if RUBY_VERSION >= '1.9'
  Encoding.internal_encoding = 'UTF-8'
  Encoding.external_encoding = 'UTF-8'
end
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы