如何在Ruby脚本而不是Rails应用程序中使用ActionMailer

问题描述

我想编写一个脚本,该脚本将连接到我的电子邮件,并使用ActionMailer从笔记本电脑终端为我发送电子邮件。我正在测试与电子邮件服务器的连接,但似乎无法正常工作。由于某些原因,即使我指定了我的smtp服务器和端口,它仍试图连接到本地主机端口25。

我的代码

action.rb

require 'action_mailer'

mailer = ActionMailer::Base.new

# check settings:
mailer.delivery_method = :smtp
mailer.smtp_settings = {
    address:              'auth.smtp.1and1.co.uk',domain:               '1and1.com',port:                 587,authentication:       'login',user_name:            'MY EMAIL ADDRESS',password:             'MY PASSWORD',enable_starttls_auto: true
  }

# send mail:
mailer.mail(
            from: 'MY EMAIL ADDRESS',to: 'MY OTHER EMAIL ADDRESS TO TEST WITH',subject: 'test',body: "Hello,you've got mail!"
            ).deliver

由于某种原因,我得到以下输出

My-MBP:auto_emailer user$ ruby action.rb
Traceback (most recent call last):
    18: from action.rb:22:in `<main>'
    17: from /Users/user/.rvm/gems/ruby-2.6.3/gems/mail-2.7.1/lib/mail/message.rb:260:in `deliver'
    16: from /Users/user/.rvm/gems/ruby-2.6.3/gems/actionmailer-6.0.3.2/lib/action_mailer/base.rb:587:in `deliver_mail'
    15: from /Users/user/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.3.2/lib/active_support/notifications.rb:180:in `instrument'
    14: from /Users/user/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.3.2/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
    13: from /Users/user/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.3.2/lib/active_support/notifications.rb:180:in `block in instrument'
    12: from /Users/user/.rvm/gems/ruby-2.6.3/gems/actionmailer-6.0.3.2/lib/action_mailer/base.rb:589:in `block in deliver_mail'
    11: from /Users/user/.rvm/gems/ruby-2.6.3/gems/mail-2.7.1/lib/mail/message.rb:260:in `block in deliver'
    10: from /Users/user/.rvm/gems/ruby-2.6.3/gems/mail-2.7.1/lib/mail/message.rb:2159:in `do_delivery'
     9: from /Users/user/.rvm/gems/ruby-2.6.3/gems/mail-2.7.1/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'
     8: from /Users/user/.rvm/gems/ruby-2.6.3/gems/mail-2.7.1/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'
     7: from /Users/user/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/net/smtp.rb:518:in `start'
     6: from /Users/user/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/net/smtp.rb:548:in `do_start'
     5: from /Users/user/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/timeout.rb:103:in `timeout'
     4: from /Users/user/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/timeout.rb:93:in `block in timeout'
     3: from /Users/user/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/net/smtp.rb:549:in `block in do_start'
     2: from /Users/user/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/net/smtp.rb:539:in `tcp_socket'
     1: from /Users/user/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/net/smtp.rb:539:in `open'
/Users/user/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/net/smtp.rb:539:in `initialize': Connection refused - connect(2) for "localhost" port 25 (Errno::ECONNREFUSED)

解决方法

您需要在课程级别上指定delivery_methodsmtp_settings选项。在https://api.rubyonrails.org/v6.0.3/classes/ActionMailer/Base.html

中了解更多信息
require 'action_mailer'

# Specify settings
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
  address: 'auth.smtp.1and1.co.uk',domain: '1and1.com',port: 587,authentication: 'login',user_name: 'MY_EMAIL_ADDRESS',password: 'MY_PASSWORD',enable_starttls_auto: true
}

# Send email
ActionMailer::Base.new.mail(
  from: 'MY_EMAIL_ADDRESS',to: 'ANOTHER_EMAIL_ADDRESS',subject: 'Testing from Ruby script',body: "Hello,you've got mail!"
).deliver

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...