ruby1.9.3: ActionMailerでメール
Rubyでメールを送る #Ruby #mail #ActionMailer - Qiita
このブログを参考に実装させていただきました。
RailsのActionMailerを利用してメールするのでインストールから。
gem install actionmailer
以下、ソース(ほぼ参考にしたコードそのまま)
#! /usr/bin/env ruby # -*- coding: utf-8 -*- require 'action_mailer' ActionMailer::Base.delivery_method = :smtp ActionMailer::Base.smtp_settings = { address: 'smtp.gmail.com', port: 587, domain: 'gmail', user_name: 'user_name', password: 'password' } class SampleMailer < ActionMailer::Base def first_example(to, from, subject, body) mail( to: to, from: from, subject: subject.to_s, body: body.to_s ) end end to = "test@example.com" from = "test@example.com" subject = "テストメール" body = "こんにちは。今日もよろしくお願いします。" SampleMailer.first_example(to, from, subject, body).deliver
以下、実装までの七転八倒
NKFでエラー
最初、ActionMailerを使わずにメールする方法を探したところ、
以下のブログがありました。
Rubyで日本語のメールを送る。 - こせきの技術日記
しかし、nkfを使うところで、no output encoding given (ArgumentError)
というエラーが発生。
出力エンコーディングが指定されていないということらしい。
バージョンアップで動作が変わったか?と思い、
ネットを調べたけど、該当するページが見当たらない。
ruby-list jp - [ruby-list:44769] Ann: Ruby-1.9.0-1 Windowsインストーラパッケージ
上記のやりとりで、解決方法が提示されているが、
LANGを削除するというのはやりたくない。
上記はKconvを使う際にencodingを指定してね、ということだが、
私の場合は直接、nkfを使う場合なのでちょっと違う。
この指定方法を調べればいいだけだが、簡単に出てこないので後で調べる
require 'English'
参考にしたコードで require 'English' とあったが意味がわからなかったのでチェック。
$@のようなマジックワードを$ERROR_POSITION というように
人に優しい言葉で書けるようになるらしい。
$@ などの特殊変数をわかりやすい英語名で使用する - わからん
失敗例
発狂する近況 - RubyからGMailにメールを送る テキスト編
このブログも参考にして実行した。
しかし、エラーは出ないが、メールが届かないという現象になった。