Ruby + TMailでGmailのSMTPサーバを使ってメールを送信したいがCcがうまく処理されない→解決した
ある必要性からRubyでgmailのsmtpサーバからメールを送るこんなスクリプトを書いた.
参考にしたのはこちら→GMailのSMTPサーバーを使ってメールを送信するサンプル - うなの日記
# -*- coding: utf-8 -*- require "rubygems" require "tmail" require "tlsmail" require "net/smtp" require "net/pop" require "kconv" def make_mail(params) mail = TMail::Mail.new mail.to = params["to"] mail.cc = params["cc"] mail.from = params["from"] mail.subject = params["subject"].tojis mail.body = params["body"].tojis mail.date = Time.now mail.mime_version = "1.0" mail.set_content_type "text", "plain", {"charset" => "iso-2022-jp"} mail.transfer_encoding = "7bit" return mail end def send_mail(mail) # Confirm mail puts "Check mail." puts "-"*10 puts "From: #{mail.from}" puts "To: #{mail.to}" puts "Cc: #{mail.cc}" puts "Subject: #{mail.subject.toutf8}" puts "Body is: #{mail.body.toutf8}" puts "-"*10 print "Are you sure? [Y/n]" if gets.chomp != "Y" puts "Cancel." exit 1 end # Confirm password print "Enter password: " password = gets.chomp Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE) Net::SMTP.start("smtp.gmail.com", 587, "localhost.localdomain", mail.from, password, "plain") do |smtp| smtp.sendmail(mail.encoded, mail.from, mail.to) puts "Sent!" end end if __FILE__ == $0 params = { } params["from"] = "from@gmail.com" params["to"] = "to@example.com" params["cc"] = ["cc1@example.com", "cc2@example.com"] params["subject"] = "件名をここに入れる" params["body"] = "本文はここに突っ込む" send_mail(make_mail(params)) end
実行するとこんな感じ.
~/% ruby test.rb Check mail. ---------- From: from@gmail.com To: to@example.com Cc: cc1@example.com, cc2@example.com Subject: 件名をここに入れる Body is: 本文はここに突っ込む ---------- Are you sure? [Y/n]Y Enter password: ここにパスワードを打ち込む Sent!
その際,Ccを指定したのだが,Toにメールは届いているようだがCcには届いていない.Toに届いたメールにはCcに指定したアドレスが記述されている.しかし届かない.と思ったらここに載っていた.
Ruby Net::SMTP - Send email with bcc: recipients - Stack Overflow
52行目の
smtp.sendmail(mail.encoded, mail.from, mail.to)
を
smtp.sendmail(mail.encoded, mail.from, mail.to, mail.cc)
にすれば動いた.