[#49662] net/smtp sslでのwhileループメール送信 — Taiki Kimura <taikimura8182@...>

はじめまして 木村といいます。

32 messages 2013/11/12
[#49663] Re: net/smtp sslでのwhileループメール送信 — Jun'ya Shimoda <junshimo2@...> 2013/11/12

下田と申します。

[#49664] Re: net/smtp sslでのwhileループメール送信 — Taiki Kimura <taikimura8182@...> 2013/11/12

下田さん

[#49665] Re: net/smtp sslでのwhileループメール送信 — Jun'ya Shimoda <junshimo2@...> 2013/11/12

(2013/11/12 19:56), Taiki Kimura wrote:

[#49666] Re: net/smtp sslでのwhileループメール送信 — Taiki Kimura <taikimura8182@...> 2013/11/12

下田さん

[#49668] Re: net/smtp sslでのwhileループメール送信 — Jun'ya Shimoda <junshimo2@...> 2013/11/12

> なるほど。

[#49669] Re: net/smtp sslでのwhileループメール送信 — Taiki Kimura <taikimura8182@...> 2013/11/13

下田さん

[#49671] Re: net/smtp sslでのwhileループメール送信 — Taiki Kimura <taikimura8182@...> 2013/11/14

お世話になっております。

[#49674] Re: net/smtp sslでのwhileループメール送信 — SATOH Fumiyasu <fumiyas@...> 2013/11/14

さとうふみやす @ OSSTech です。

[#49676] Re: net/smtp sslでのwhileループメール送信 — SATOH Fumiyasu <fumiyas@...> 2013/11/14

さとうふみやす @ OSSTech です。

[#49678] Re: net/smtp sslでのwhileループメール送信 — Taiki Kimura <taikimura8182@...> 2013/11/14

さとうさん

[#49679] Re: net/smtp sslでのwhileループメール送信 — Taiki Kimura <taikimura8182@...> 2013/11/18

お世話になっています。

[#49681] Re: net/smtp sslでのwhileループメール送信 — Jun'ya Shimoda <junshimo2@...> 2013/11/18

下田です。

[#49688] Re: net/smtp sslでのwhileループメール送信 — Masaya TARUI <tarui@...> 2013/11/19

たるいといいます。

[#49705] sprintfフォーマットについて — Hikaru Seki <seki.p.hikaru@...>

23 messages 2013/11/30

[ruby-list:49700] Re: net/smtp sslでのwhileループメール送信

From: Taiki Kimura <taikimura8182@...>
Date: 2013-11-20 04:00:40 UTC
List: ruby-list #49700
> 最初 body = "本文"なのがeachのループにつれてbody = "header header header 本文"なので、
>ヘッダーをつける段階からbodyと違う変数名を使わないといけません。

この事象はご教示いただいたように対処したところ解消しました。
(何がだめだったのかご教示いただいた事例を熟読したところ何となく理解できました)

が、メール自体は複数届いてしまう事象が残りました。

で、それは恐らく、sendmailメソッド内とsendmailを呼び出した時とに2回ほど、

  input = open("data.txt")
  input.lines do |to|
  to = to.chomp

これを実行しているからなのでは??とあたりをつけ、
sendmailメソッド内の方で上記部分を削除したところメールが複数届く事象も解消しました。


これでやりたいことが、ほぼできるようになったのですが欲がでたため、
sendmailメソッドを呼び出す際のメール本文をヒアドキュメントではなくてファイルにしてみました。


//sendmailメソッド内のmailbodyというヒアドキュメントを、
//メソッドの外に出すことも挑戦してみたいと思っています。


で、そのメール本文となるファイルを敢えてWindowsのテキストエディタ(template.txt)で作成し、
それをメール下部のようなコードで読み込ませたところ、
こちらも文字化けせず期待通りのメールが送信できるようになりました。

ここで1つ新たな疑問がでてきました。

当方のやりたいことは、
AWSのSESサービスを使って年末年始の挨拶メールを
取引先に数百通ほど自動で一斉送信する、というものです。

この場合の挨拶メール本文は、
社内の事務方社員がWindows端末のテキストエディタで作成するため、
上述のtemplate.txtを読み込むテストまで行ったのでした。

で、Rubyスクリプトが扱うファイルの文字コードが、
上述のようにShift_JIS (CR)固定であり、これ以外の文字コードのファイルを扱わない場合、
現時点でできあがったスクリプトを使用することで問題はないと思っています。

が、もしも、Rubyスクリプトが扱うファイルの文字コードが固定でない場合、
ファイルを読み込む前に、一度、文字コードを判定する?みたいな処理を入れ、
その結果に応じて、都度UTF-8に変換する、といったようなことをするのが一般的なのでしょうか?

個人的には、Rubyスクリプトが読み込むファイルの頻度がそれほど多くない場合、
読み込むファイルの文字コードを、$nkf --guess hoge.txtなどで事前に確認し、
その結果にあわせて、スクリプトの当該箇所を随時変更する、でもよいのかなーと思ったりしています。


------------------------------------------------------
# coding:utf-8

def sendmail(from, to, subject, body)

smtp = Net::SMTP.new(HOST, PORT)
smtp.enable_ssl

mailbody = <<EOF
From: #{from}
To: #{to}
Subject: #{NKF.nkf("-WMm0j", subject)}
Date: #{Time.now.rfc2822}
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

#{body}
EOF
  mbody = NKF.nkf("-Wj", mailbody).force_encoding("ASCII-8BIT")
  smtp.start(HELO, ACCESS_KEY, SECRET_KEY, :plain) {|s| s.send_message
mbody, from, to}
end

tolist = open("data.txt")
tolist.lines do |toaddr|
toaddr = toaddr.chomp
  ftext = open("template.txt", "r:cp932:UTF-8")
  mtext = ftext.read
sendmail("hoge@aaa.net" ,toaddr, "Mailてすと" ,mtext)
end
------------------------------------------------------

In This Thread

Prev Next