糞糞糞ネット弁慶

読んだ論文についてメモを書きます.趣味の話は http://repose.hatenablog.com

Ruby + TMailでGmailのSMTPサーバを使ってメールを送信したいがCcがうまく処理されない→解決した

ある必要性からRubygmailsmtpサーバからメールを送るこんなスクリプトを書いた.
参考にしたのはこちら→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)

にすれば動いた.