PHPでPostfixを利用して、簡単にメールを送る方法は調べれば出てきます。
PHPで作るお問い合わせメールフォーム(自動返信機能付き)
同じようなことをRailsでやりたくて、ネットを調べたのですがGmail経由の情報は合ったのですが、独自ドメインで送信する方法が見つからなかったので、ご紹介します。
RailsのActionMailerでメールを送信する(Gmail経由)
##Postfixがインストールされているかの確認
VPSなどからメールを送る際には、SMTP(Simple Mail Transfer Protocol)に則ったソフトウェアが必要になります。色々種類は有りますが、ここではPHPのメール送信で利用したPostfixを利用します。
PostfixはVPS上で以下のコマンドで入っているかどうか確認することができます。(yumでインストールされた中で、postfixを検索検索!)
$ yum list installed | grep postfix
postfix.x86_64 2:2.6.6-2.2.el6_1 @anaconda-CentOS-201303020151.x86_64/6.4
postfix…と表示されれば、インストールされています!もし表示されなければyumでインストールして下さい
$ sudo yum install postfix
##メールを送るための環境設定
メールを送るための環境設定を行います。とりあえずは開発環境のみで使う設定を行います。
Postfixはデフォルトでローカルから特に認証をせずにメールを送ることができるので、saslauthdなどの認証は不要。
また、config.action_mailer.raise_delivery_errors=true
を設定しないとメールが送れていなくてもエラーメッセージが表示されません。デフォルトでfalse
になっているので、true
に変えましょう。
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => 'localhost'
}
##メールを送るクラスの作製
メールを送るためのコントローラ、送信するメールの内容を記述するクラスを自動生成します
# rails g mailer クラス名 メソッド名
$ rails g mailer NoticeMail sendMail
##メールクラスの編集
メールを送るアドレスや、送信先などを設定します。
class NoticeMail < ActionMailer::Base
#送信元のアドレス
default from: "from@example.com"
# Subject can be set in your I18n file at config/locales/en.yml
# with the following lookup:
#
# en.notice_mail.sendMail.subject
#
def sendMail
@greeting = "Hi"
#宛先メールアドレス
mail to: "to@example.org"
#送信メールの件名
mail subject: "テストメールです"
end
end
##メール内容の編集
生成されたテンプレートの拡張子を~.html.erb
にすればHTMLメール、~.text.erb
にすればテキストのメールを送ることができます
NoticeMail#sendMail
<%= @greeting %>, find me in app/views/app/views/notice_mail/sendMail.text.erb
テストメールです!!
これで、メールを送ることができます!Railsのコンソールで確認してみましょう。
$ rails c
NoticeMail.sendMail.deliver
##Viewからメールの送信
Viewの中からメールを送信するには、バタンなど押されたときにアクションとして書いてあげればOKです!
まずはコントローラにリンクが押された時のアクションを作り、ルートを定義します。
#コントローラとビューの作成
$ rails g controller MailList top
#メールを送るアクション
def go_mail
NoticeMail.sendMail.deliver
render :text => '送信完了!'
end
#メールを送るアクションのルート定義
get 'go_mail' => 'mail_list#go_mail'
あとはViewに押されたときにアクションを実行するリンクを作ります。
<%= link_to "メール送信", :action => 'go_mail' %>
エラーが起きずに送信されればバッチグーです!!
お疲れ様でした^^