發送設定
1. 開啟Devise 寄信功能
前往 config/initializers/devise.rb
裡修改這兩個指令:
這個步驟發送信件會由Devise取代rails原本的mailer
1 | config.mailer = 'Devise::Mailer' |
這個步驟會在收件方顯示寄件名稱
1
config.mailer_sender = 'Ruby_cinema <Ruby@cinema.com>'
2.寄件設定(使用mailgun)
找到檔案config/environments/development.rb
(此處為開發環境),設定
1 | config.action_mailer.raise_delivery_errors = true |
其中config.action_mailer.smtp_settings
通常會把詳細寄件資訊整理到email.yml檔,所以要在config建立一個email.yml存放資訊設定
1 | development: |
domin、user_name、password皆為私人所有,設定為讀取環境變數,config.action_mailer.smtp_settings則要修改為讀取email.yml,可設定不同環境讀取不同的寄件設定(例如development使用gmail寄信、production使用mailgun),但這裡我兩個都使用mailgun。
1 | config.action_mailer.smtp_settings = config_for(:email).symbolize_keys |
環境變數的設定我是使用dotenv套件,只要增加.env檔案設定要帶入email.yml檔的變數即可,設定完成後記得要把.env
檔加入.gitignore
內,以免推上github被陌生人看光光。
1 | DOMAIN=sandboxXXXXXXXXXXXXX.mailgun.org |
以上設定完之後就可以去登入介面按忘記密碼測試一下是否能正常寄信囉~
大約1分鐘內可以收到。
發送失敗
那如果很久都沒收到信呢?可以試著檢查看看
1. config.mailer_sender 一定要帶上郵件地址
以下兩種字串都會失敗
1 | config.mailer_sender = 'Ruby_cinema' 沒有角括號 |
經過測試,角括號內長的像email(像是aa@aa這種,在@前後有英文之類的…)就能寄出,而且還會跑到Gmail的促銷內容(原因待查)
1 | config.mailer_sender = 'Ruby_cinema <Ruby@cinema.com>' |
2.沒有吃到環境變數
安裝、設定完之後,可以進入rails c輸入ENV
查詢目前環境可以讀取到的環境變數,如果設定成功應該會看到,如果沒有的話可以再去檢查看看目前環境是不是挑錯了。
3.mailgun註冊後沒有進行開通
註冊完mailgun請記得去註冊帳號信箱收開通信,否則無法正常使用mailgun功能。
4.其他原因
設定config.action_mailer.raise_delivery_errors = true
,設定為true則是會在寄信中回報錯誤訊息,我自己會收到錯誤訊息常常因為打錯字或是漏設定(例如smtp沒有設定成mailgun)。
以上是我利用devise套件寄信的踩雷心得分享,繼續摸索Devise這個套件的奧妙。
參考資料:
devise-github
為你自己學 Ruby on Rails - 寄發信件
Rails 實戰聖經-ActionMailer - E-mail 發送