- ベストアンサー
sendmailの長い文章の送信について
- sendmailを使って本文(HTML)が長い場合、うまく送信されない問題が発生しています。
- 文字コードは通常はjisコードに変換する必要がありますが、Shift-jisで送信したいと思っています。
- 長い文章の送信において、画像タグが正しく認識されず、改行やスペースの問題が発生します。どのような対策を行えばよいでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
受信したメールの長い行が改行されるのは、 メールクライアントの設定に依存するのでは。 以下のように、マルチパートを組み立ててみてもだめでしょうか。 -------------------------------------------------- #!/usr/local/bin/perl use strict; use watnings; use MIME::Lite; my $html = <<EOH; <html> <head> <style type="text/css"><!-- body { background-color: #FFCCFF; } --></style> </head> <body> <div> ... 省略 </div> <marquee><img src="cid:02"><img src="cid:03"><img src="cid:04"><img src="cid:05"><img src="cid:06"><img src="cid:07"><img src="cid:04"><img src="cid:08"><img src="cid:09"><img src="cid:10"></marguee> <div> ... 省略 </div> </body> </html> EOH # 適当な日本語文字エンコーディング変換モジュールで$html をコード変換 my $msg = MIME::Lite->new( From => 'me@myhost.com', To => 'you@yourhost.com', Subject => 'Hello!', # 日本語を含む件名ならMIMEエンコード Type => 'multipart/related' ); $msg->attach( Type => 'text/html;charset="iso-2022-jp"', Data => $html, ); $msg->attach( Type => 'image/png', # 画像のMIMEタイプにあわせる Id => '02.png', Path => '/path/to/somefile02.png', ); $msg->attach( Type => 'image/png', Id => '03.png', Path => '/path/to/somefile03.png', ); ... 同様に画像ファイルを全てattach $msg->send;
その他の回答 (2)
- chaimasuka
- ベストアンサー率57% (26/45)
$message="<HTML><HEAD></HEAD><BODY ..."; の箇所をヒアドキュメントを用いて, img要素の途中で改行しないように 書き直してみてはいかがでしょう。 $message = <<'EOS'; <html> <head> </head> <body bgcolor ... (略) <MARQUEE> <FONT color="#FF0000"> <IMG src="cid:02"> <IMG src="cid:03"> ... (略) </body> </html> EOS といった感じで。 ほかにも、IE独自実装のmarquee要素を使ってるとか、 img要素をfont要素で囲んでるのは意味ない、 とかつっこみどころはありますが ^^;
補足
何度もありがとうございます。 教えていただいた方法でも試行錯誤しながら試してみたのですが、結果から申し上げるとやはりダメでした。 IMGタグの途中での改行をしないように変更してみたのですが、IMGタグが少ない場合が問題ないことが分かりましたが、例えばIMGタグが多数(極端な場合20個)あった場合、やはりどこかで改行を入れなくてはIMGタグの途中で自動的に改行が入ってしまうようです。 そこで強制的に<IMG src="cid:02">と<IMG src="cid:03">の間に改行を入れると、表示はできるのですが、<IMG src="cid:02">と<IMG src="cid:03">の間にスペースが入ってしまいます。 メールの内容は何バイトかで自動的に改行とスペースが入ってしまうとgoogleなどで見かけましたが、他のサイトでは1行で改行やスペースが入る事なく送信されているので、私も同じような事が出来ないかと色々調べているのですが、いまだに分かりません。 1行で送る方法っていうのは不可能なのでしょうか?
- chaimasuka
- ベストアンサー率57% (26/45)
CPANモジュール MIME::Lite を使えば楽
補足
早速ありがとうございます。 MIME::Liteモジュールを使ってみたのですが、結果としては同じ事となりました・・・。やはり、改行とスペースが勝手に入ってしまうようです・・・。 他に方法をご存知ないでしょうか?
お礼
ありがとうございます。 原因がプログラムというより、サーバーの設定にあることが判明し、設定を変更したところうまく表示されるようになりました。 ずっと私のプログラムの問題だと思って試行錯誤を重ねておりましたが、まさかサーバーの設定に問題があるとは・・・。 何度もご丁寧に教えていただきありがとうございました。