3

我有个类似的问题。我正在使用 sendmail 选项并继续收到错误

“发送邮件需要 SMTP 发件人地址。设置邮件 smtp_envelope_from、return_path、发件人或发件人地址。”

我已经从 ruby​​ 控制台测试了 Mail gem,它运行良好。AppConfig 报告传递方法是 sendmail,并且报告与文件sender_address中输入的完全一样。也返回sendmail。当我设置时,我收到一个类似但不同的错误消息..app/config/diaspora.yamlMail.delivery_method@smtp_envelope_from = 'myemail@example.com'gems/mail-2.5.4/lib/mail/message.rb

“发送邮件需要 SMTP 收件人地址。将邮件设置为 smtp_envelope_to、to、cc 或 bcc 地址。”

这个错误出现了lib/mail/check_delivery_params.rb:9:in check_delivery_params',因此我尝试设置@smtp_envelope_to = 'myrecipient@example.com'in message.rb,只是为了测试这一点,因为我知道这些设置应该应用于其他地方(这个线程似乎是我唯一能找到解决这个问题的)设置后我收到的错误@smtp_envelope_to

“myrecipient@example.com”的未定义方法映射:字符串

我最初担心delivery_method没有设置正确,但跟踪显示在调用 check_delivery_params 之前我输入了lib/mail/network/delivery_methods/sendmail.rb:50:in交付!所以事实并非如此。这是一周前克隆的标准安装。使用RVM and ruby-1.9.3-p484. 我在生产模式和开发模式下遇到相同的错误。我正在使用grep -r方法签名等策略来帮助我找到正在设置和初始化它们的文件和属性。我无法理解 configure 如何设置值AppConfig 以及确切的Devise::Mailer工作原理。

在所有这一切中,我最大的疑问是我在侨民应用程序中的哪个位置调用设置方法smtp_envelope_fromsmtp_envelope_to在侨民中设置这些方法的标准方法是什么,以及如何确认它们已设置。我正在尝试为password_instructions. 看来这是留待设计处理了。

请帮忙,因为我一直在寻找解决方案一段时间。我不准备放弃,sendmail因为这不一定是问题。同样在我正在使用的版本中,config/initializers/devise.rb没有前面提到的属性,它们似乎以某种方式自动设置,但是这对于将数据与逻辑分离很有用,当它似乎不起作用时实际上有点烦人。

进一步:研究我发出以下命令来查看相关属性的设置位置,并且它不会返回将它们设置为我期望它们的值的单个文件,它们被初始化就是这样。

~$ grep -r smtp_envelope_from

.irb-history:Mail.smtp_envelope_from

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/check_delivery_params.rb:如果 mail.smtp_envelope_from.blank?

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/check_delivery_params.rb: raise ArgumentError.new('An SMTP From address is required to send a message. 设置消息 smtp_envelope_from、return_path、发件人或来自地址。')

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/check_delivery_params.rb:[mail.smtp_envelope_from,mail.smtp_envelope_to,消息]

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb:@smtp_envelope_from = nil

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: #mail.smtp_envelope_from = 'Mikel'

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: # mail.smtp_envelope_from #=> 'mikel@test.lindsaar.net'

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: #mail.smtp_envelope_from 'Mikel'

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: # mail.smtp_envelope_from #=> 'mikel@test.lindsaar.net'

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb:def smtp_envelope_from(val = nil)

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: self.smtp_envelope_from = val

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: @smtp_envelope_from || 返回路径 || 发件人 || from_addrs.first

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: #mail.smtp_envelope_from = 'Mikel'

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: # mail.smtp_envelope_from #=> 'mikel@test.lindsaar.net'

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: def smtp_envelope_from=( val )

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb:@smtp_envelope_from = val

我运行的另一个命令是为了查看我能找到什么

~$ grep -r smtp_envelope_to

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/check_delivery_params.rb:如果 mail.smtp_envelope_to.blank?

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/check_delivery_params.rb: raise ArgumentError.new('发送消息需要一个 SMTP To 地址。设置消息 smtp_envelope_to、to、cc 或 bcc 地址。')

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/check_delivery_params.rb:[mail.smtp_envelope_from,mail.smtp_envelope_to,消息]

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb:@smtp_envelope_to = nil

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: #mail.smtp_envelope_to = 'Mikel'

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: #mail.smtp_envelope_to #=> 'mikel@test.lindsaar.net'

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: #mail.smtp_envelope_to ['Mikel', 'Lindsaar']

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: #mail.smtp_envelope_to #=> ['mikel@test.lindsaar.net', ' lindsaar@test.lindsaar.net']

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb:def smtp_envelope_to(val = nil)

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb:self.smtp_envelope_to = val

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: @smtp_envelope_to || 目的地

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: #mail.smtp_envelope_to = 'Mikel'

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: #mail.smtp_envelope_to #=> 'mikel@test.lindsaar.net'

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: #mail.smtp_envelope_to = ['Mikel', 'Lindsaar']

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: #mail.smtp_envelope_to #=> ['mikel@test.lindsaar.net', ' lindsaar@test.lindsaar.net'] .rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: def smtp_envelope_to=( val )

.rvm/gems/ruby-1.9.3-p484@diaspora/gems/mail-2.5.4/lib/mail/message.rb: @smtp_envelope_to =

grep:aquota.user:权限被拒绝

diaspora/log/development.log:ArgumentError(发送消息需要一个 SMTP To 地址。将消息设置为 smtp_envelope_to、to、cc 或 bcc 地址。):

diaspora/log/development.log:ArgumentError(发送消息需要一个 SMTP To 地址。将消息设置为 smtp_envelope_to、to、cc 或 bcc 地址。):

grep:丢失+找到:权限被拒绝

如您所见,这些设置已在其中初始化,mail/lib/mail/message.rb但未在其他任何地方赋予适当的值。这些方法是否有可能具有别名或以某种方式设置而我无法使用此技术找到它们?是否有可能actionmailer有散居者不支持的新要求或更改mailruby-1.9.3-p848(安装wiki专门说要使用这个版本。)config/diaspora.yaml允许我指定默认的发件人地址,但如果我没记错的话,应该在邮件块中设置收件人地址

仍然对此一无所知,请帮助

进一步测试以响应错误

“myrecipient@example.com”的未定义方法映射:字符串

lib/mail/check_delivery_params.rb:9:in check_delivery_params'期待一个数组,所以我设置了@smptp_envelope_to = ['myreciepient@example.com']gems/mail-2.5.4/lib/mail/message.rb并且在请求密码重置指令时电子邮件是成功的,但电子邮件中的内容是空的。现在考虑某个问题~/diaspora/app/mailers/diaspora_devise_mailer.rb~/.rvm/gems/ruby-1.9.3-p484@diaspora/gems/devise-3.0.2/app/mailers/devise/mailer.rb当我发现我得到的最后提到的文件时

> class Devise::Mailer < Devise.parent_mailer.constantize
>>  include Devise::Mailers::Helpers
>>
>>  def confirmation_instructions(record, opts={})
>>>    devise_mail(record, :confirmation_instructions, opts)
>>  end

>>  def reset_password_instructions(record, opts={})
>>>    devise_mail(record, :reset_password_instructions, opts)
>>  end

>>  def unlock_instructions(record, opts={})
>>>    devise_mail(record, :unlock_instructions, opts)
>>  end
> end

我现在正在通过控制器工作,devise/app我认为问题出在设计上。散列 ruby​​ 中邮件程序上的操作方法应该可以帮助我找到这个问题。必须在某处创建消息块,但它的位置不明显。如果有人能指出我创建消息块的正确位置,我会做一个小的胜利舞,或者不做。

我还想指出 ~/diaspora/config/routes.rb 中与此相关的唯一条目是

>  # This is a hack to overide a route created by devise.
>  # I couldn't find anything in devise to skip that route, see Bug #961
>  match 'users/edit' => redirect('/user/edit')
>
>  devise_for :users, :controllers => {:registrations => "registrations",
>                                      :password      => "devise/passwords",
>                                      :sessions      => "sessions"}

我很好奇我是否不应该看看散居中的这个错误

通过再次从 github 克隆散居地,这已经神奇地解决了。这是一个更新版本,也需要更新版本的 ruby​​。经过标准流程,一切正常。谢谢你看这个。我仍然会继续挖掘,看看有什么不同的东西

4

1 回答 1

0

通过克隆更新版本的散居地解决了这个问题。问题似乎是较新版本的 Devise::Mailer 打破了散居地。

于 2017-03-18T05:29:21.733 回答