问题描述
我想编写一个脚本,该脚本将连接到我的电子邮件,并使用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_method
和smtp_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