目的
在很多情況下都需要透過 E-mail 的功能,而我目前是需要寄送註冊認證信給使用者,我們使用 ActionMailer 來整合 E-mail!
開發版本與環境
Ruby :v2.3.0
Rails:v4.2.5
IDE :Cloud 9
筆記
1. Devise 設定
這邊我們只講寄信時,devise 需注意的設定,最簡單的方式,就是開啟 Devise::Mailer
2. ActionMailer 設定
|
|
其實一般來說,我們不會將 smtp_settings 寫在程式碼裡,而是拆成另一個設定檔,便於管理在不同狀態下的設定:
註:cloud 9 中,多數 port 預設是 blocked,但依我自己的測試, mailgun 可透過 2525、587 來寄出信件,而 gmail 只能由 587 寄信。
smtp_settings 的部分就可以修改成:
3. 關於 email.yml
這邊來聊聊上面的 email.yml。
ROR 環境預設有三個,development
、production
和test
,一般 rails server
開啟環境預設是 development,我們可以透過 -e
來變更啟動環境,例如 rails s -e test
。
範例 email.yml 中,則表示:
development 時,使用 gmail 寄信。
production 時,使用 mailgun 寄信。
在帳號(user_name)及密碼(password)這邊需要注意的是,如果你是將密碼寫死在設定中,記得一定要將 email.yml 加到 .gitignore 中,避免上傳到 github 自曝帳密;比較好的方法是使用 RAILS_ENV 來取得環境設的變數,由於是寫在 yaml 中,所以我們寫成 <%=ENV['GMAIL_USERNAME']%>
,如果是寫在 .rb 中,則使用 ENV['GMAIL_USERNAME']
即可。這樣我們就可以透過環境設的值作設定。
4. 設定 RAILS_ENV 變數
- 在 Ubuntu 下,可以編輯 ~/.bashrc 並加入以下作環境變數的設定 (在 Mac 下,則編輯 ~/.profile):1export GMAIL_USERNAME="[email protected]"
以此類推,自行添加。
Heroku 的話,可直接在
Settings > Config Variables
中添加,或用以下指令作設定:1heroku config:add GMAIL_USERNAME="[email protected]"Cloud 9 的話,在 Runner 中有 ENV 可直接添加,或用 Ubuntu 的方式添加亦可 (因為 c9 的 ROR 環境是 Ubuntu )
5. Gmail 密碼問題
其實上述四個步驟後,就可以成功的寄出信件,但還是補充一下關於 gmail 有可能寄不出信的設定問題。
請先到 gmail 中作安全性設定,並取得密碼: 設定安全性
→ 二階段驗證
→ 應用程式密碼
而取得的應用程式密碼就是要填入的密碼囉!
後記
一開始我是想用 sendgrid 來作 smtp 送信,但真的試不出來也不知道什麼問題,有興趣的人可看這篇文章,雖然是阿本仔寫的,但也是很清楚明瞭!
That’s it, DONE!
【參考資料】
- Ruby on Rails 實戰聖經:https://ihower.tw/rails4/actionmailer.html
- 安全地設定 Rails 郵件密碼:http://tsaith.github.io/an-quan-di-she-ding-rails-you-jian-mi-ma.html
- Rails Environment Variables:http://railsapps.github.io/rails-environment-variables.html
- 官方討論:https://community.c9.io/t/how-can-i-send-email-from-my-app/1262