2010-07-16 4 views
34

Я пытаюсь отправить некоторые сообщения с консоли на моем производственном сервере, и они не выходят. Я не могу понять, почему. У меня есть только стандартная настройка электронной почты с помощью sendmail. Когда я вызвать метод Mailer.deliver_ я получить это обратно:Отправить электронное сообщение от rails console

#<TMail::Mail port=#<TMail::StringPort:id=0x3fe1c205dbcc> bodyport=#<TMail::StringPort:id=0x3fe1c2059e00>> 

EDIT: Добавлен еще некоторую информацию:

Так, например, у меня есть эта линия в мой контроллер, когда новый пользователь вверх, для отправки им «добро пожаловать» по электронной почте:

Mailer.deliver_signup(@user, request.host_with_port, params[:user][:password]) 

Это прекрасно работает. Я думал, что я должен быть в состоянии сделать то же самое с консоли, например

user = User.find(1) 
Mailer.deliver_signup(user, "mydomainname.com", "password") 

Когда я делаю это, я получаю Tmail :: StringPort объект назад, но, кажется, что почта не присылают из (I Я пытаюсь отправить электронные письма себе, чтобы проверить это).

Я нахожусь на сервере ubuntu в случае, если это помогает. спасибо - max

+0

Вы пытаетесь отправить по электронной почте в Интернете? – txwikinger

+0

Это довольно стандарт для возвращаемого значения для метода доставки, возможно, что-то не так с вашим почтовым адресом sendmail или получателем. – Karl

ответ

16

Для отправки электронной почты из Rails Console сначала мы должны выполнить этот параметр в консоли для настроек почтовой программы действия.

ActionMailer::Base.delivery_method = :smtp 
ActionMailer::Base.smtp_settings = { 
    address: 'smtp.gmail.com', 
    port: 587, 
    domain: 'gmail.com', 
    authentication: 'plain', 
    enable_starttls_auto: true, 
    user_name: '[email protected]', 
    password: 'yourpassword' 
} 

После этого Если мы выполним отправку кода электронной почты, он отправит электронное письмо.

UserMailer.activation_instructions(@user).deliver_now 
0

Я не 100%, если я понимаю, что вы пытаетесь сделать.

Если вы пытаетесь отправить электронную почту в Интернет, ваш sendmail должен быть настроен таким образом, чтобы пересылать эти электронные письма на соответствующий сервер электронной почты. В зависимости от того, какую версию Ubuntu вы используете, вы можете просто перенастроить пакет для этого.

Вы также можете подумать, хотите ли вы использовать procmail вместо sendmail.

Вы можете изменить конфигурацию электронной почты с

dpkg-reconfigure sendmail 

потребительной Procmail вместо этого, если вы используете этот пакет. В диалоговом окне конфигурации вы можете выбрать способ перенаправления всей почты на соответствующий почтовый сервер. Однако вам нужно подумать, нужна ли вам аутентификация или если этот сервер просто принимает сообщения электронной почты с вашего сервера.

+0

привет, извините, я, вероятно, должен был предоставить более подробную информацию. Я редактировал свой оригинальный пост. –

45

я столкнулся с подобной проблемой сегодня утром на приложение Rails 3, где я назвал:

UserMailer.activation_instructions(@user) 

Это дало мне данные, но не посылать электронную почту из. Чтобы отправить, я позвонил:

UserMailer.activation_instructions(@user).deliver 

Это сделало трюк. Надеюсь, это может сработать и для вас!

+3

, похоже, не работает для меня, вам нужно явно установить рельсы env, чтобы он подбирал правильную конфигурацию среды actiomailer? – Rubytastic

60

Quicker версия:

ActionMailer::Base.mail(
    from: "[email protected]", 
    to: "[email protected]", 
    subject: "Test", 
    body: "Test" 
).deliver 
+2

Это лучше, хотя 'deliver' устарел, и рекомендуется использовать' deliver_now' вместо этого. – iamse7en

+0

Как бы я использовал существующий шаблон? как UserMailer.account_activation email .. – sambehera

 Смежные вопросы

  • Нет связанных вопросов^_^