Как настроить ActionMailer из базы данных? [Дубликат]

Симон Моурир дал этот пример :

object o = null;
DateTime d = (DateTime)o;  // NullReferenceException

, где unboxing преобразование (литье) из object (или из одного из классов System.ValueType или System.Enum или из типа интерфейса) - тип значения (кроме Nullable<>) сам по себе дает NullReferenceException.

В другом направлении конверсия бокса из a Nullable<>, которая имеет HasValue, равную false , на ссылочный тип, может дать ссылку null, которая затем может привести к NullReferenceException. Классический пример:

DateTime? d = null;
var s = d.ToString();  // OK, no exception (no boxing), returns ""
var t = d.GetType();   // Bang! d is boxed, NullReferenceException

Иногда бокс происходит по-другому. Например, с помощью этого не общего метода расширения:

public static void MyExtension(this object x)
{
  x.ToString();
}

следующий код будет проблематичным:

DateTime? d = null;
d.MyExtension();  // Leads to boxing, NullReferenceException occurs inside the body of the called method, not here.

Эти случаи возникают из-за специальных правил, используемых во время выполнения при боксе Nullable<> экземпляров.

4
задан Fabian 15 July 2009 в 14:53
поделиться

4 ответа

Вы можете сделать это в контроллере:

class ApplicationController < ActionController::Base

   ...

private

  def set_mailer_settings

    ActionMailer::Base.smtp_settings.merge!({
      username: 'username',
      password: 'yoursupersecretpassword'
    })

  end

end
1
ответ дан Alejo 31 August 2018 в 22:54
поделиться

Так как файлы конфигурации все Ruby, тогда настройки могут быть легко извлечены из файла конфигурации или т. п. во время выполнения.

Вот сообщение, которое я написал некоторое время назад на , чтобы заставить ActionMailer работать с GMail SMTP .

ПРИМЕЧАНИЕ. Если вы используете рельсы 2.3 и Ruby 1.87, вам не нужен плагин и вы можете просто использовать настройки в этого комментария

0
ответ дан Douglas F Shearer 31 August 2018 в 22:54
поделиться
  • 1
    Yip, я видел это :) Я должен был объяснить дальше, мне нужно иметь возможность динамически устанавливать имя учетной записи и amp; pw во время выполнения (т. е. из db) ... Мне было интересно, есть ли простой способ сделать это :) – Fabian 15 July 2009 в 06:23

Предполагая, что вы настроили smtp_settings в своей среде или инициализаторах, вы можете просто установить имя пользователя так:

Notifier.smpt_settings.merge!({:user_name => "x", :password=> "y"})
0
ответ дан Jeff Paquette 31 August 2018 в 22:54
поделиться

(Rails 3)

Поскольку я вызываю почтовую программу следующим образом:

CustomerMailer.customer_auto_inform(@form).deliver

В классе CustomerMailer у меня есть частный метод:

def init_email_account(shop_mail)
  ActionMailer::Base.raise_delivery_errors = true
  ActionMailer::Base.smtp_settings = {
    :address              => shop_mail.address,
    :port                 => shop_mail.port,
    :domain               => shop_mail.domain,
    :user_name            => shop_mail.user_name,
    :password             => shop_mail.password,
    :authentication       => shop_mail.authentication.name,
    :enable_starttls_auto => shop_mail.enable_starttls_auto
  }
end

Before вызывающая почта (), которая отправляет электронную почту, вы должны вызвать частный метод init_email_account для заполнения smtp_settings из базы данных. shop_mail - это модель, в которой хранятся данные о настройках учетной записи электронной почты.

HTH

2
ответ дан zigomir 31 August 2018 в 22:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: