Отправить письмо с консоли rails - PullRequest
53 голосов
/ 16 июля 2010

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

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

РЕДАКТИРОВАТЬ: Добавлена ​​дополнительная информация:

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

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

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

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

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

Я нахожусь на сервере Ubuntu на случай, если это поможет. спасибо - макс

Ответы [ 4 ]

86 голосов
/ 20 октября 2015

Более быстрая версия:

ActionMailer::Base.mail(
  from: "test@example.co", 
  to: "valid.recipient@domain.com", 
  subject: "Test", 
  body: "Test"
).deliver_now
47 голосов
/ 25 октября 2011

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

UserMailer.activation_instructions(@user)

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

UserMailer.activation_instructions(@user).deliver

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

27 голосов
/ 18 ноября 2014

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

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: 'your@gmail.com',
  password: 'yourpassword'
}

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

UserMailer.activation_instructions(@user).deliver_now
0 голосов
/ 16 июля 2010

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

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

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

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

dpkg-reconfigure sendmail

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

...