アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
sendmailを使って本文(HTML)が長い場合、どうしてもうまく送信されません。文字コードは普通はjisコードに変換するようなのですが、Shift-jisで送信したいと考えております。
以下に参考例としてあげさせていただきます。

open(SENDMAIL, "| '/usr/sbin/sendmail' -t");
---省略---
print SENDMAIL "Content-Type: text/html\; charset=Shift_JIS\n\n";
print SENDMAIL "$message\n";
---省略---
close SENDMAIL;

$message="<HTML><HEAD></HEAD><BODY bgcolor=\"#FFCCFF\"><DIV>\</DIV><DIV><BLINK>O</BLINK><FONT color=\"#FFA500\">O</FONT><FONT color=\"#FF00FF\"><BLINK>O</BLINK></FONT><FONT color=\"#FFA500\">O</FONT><BLINK>O</BLINK><FONT color=\"#FFA500\">O</FONT><FONT color=\"#FF00FF\"><BLINK>O</BLINK></FONT><FONT color=\"#FFA500\">O</FONT><BLINK>O</BLINK><FONT color=\"#FFA500\">O</FONT><FONT color=\"#FF00FF\"><BLINK>O</BLINK></FONT><FONT color=\"#FFA500\">O</FONT></DIV><DIV>\</DIV><MARQUEE><FONT color=\"#FF0000\"><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\"></FONT></MARQUEE><DIV>\</DIV><DIV><BLINK>O</BLINK><FONT color=\"#FFA500\">O</FONT><FONT color=\"#FF00FF\"><BLINK>O</BLINK></FONT><FONT color=\"#FFA500\">O</FONT><BLINK>O</BLINK><FONT color=\"#FFA500\">O</FONT><FONT color=\"#FF00FF\"><BLINK>O</BLINK></FONT><FONT color=\"#FFA500\">O</FONT><BLINK>O</BLINK><FONT color=\"#FFA500\">O</FONT><FONT color=\"#FF00FF\"><BLINK>O</BLINK></FONT><FONT color=\"#FFA500\">O</FONT></DIV><DIV>\</DIV></BODY></HTML>";

上記のような長い文章を送った場合、例えば、<IMG src=\"cid:08\">が、<IMG src= と \"cid:08\">に分かれてしまい、画像として認識してくれません。間には改行とスペースが入ってしまってイメージタグとして認識出来ないようなのです。

メール送信の際の1行に送れる文字が問題なのではないかと思うのですが、あえて、<IMG ・・・>と<IMG ・・・>の間に\nを挿入してみたのですが、そうすると今度は<IMG ・・・>と<IMG ・・・>の間(つまり画像と画像の間)にスペースが入ってしまいます。

この場合どのような対策を行えばよろしいのでしょうか?
説明が分かりにくくて申し訳ありませんが、どなたかよろしくお願いします。

A 回答 (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;
    • good
    • 0
この回答へのお礼

ありがとうございます。

原因がプログラムというより、サーバーの設定にあることが判明し、設定を変更したところうまく表示されるようになりました。
ずっと私のプログラムの問題だと思って試行錯誤を重ねておりましたが、まさかサーバーの設定に問題があるとは・・・。

何度もご丁寧に教えていただきありがとうございました。

お礼日時:2007/10/17 04:20

$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行で送る方法っていうのは不可能なのでしょうか?

補足日時:2007/10/14 03:52
    • good
    • 0

CPANモジュール MIME::Lite を使えば楽



参考URL:http://search.cpan.org/dist/MIME-Lite/

この回答への補足

早速ありがとうございます。

MIME::Liteモジュールを使ってみたのですが、結果としては同じ事となりました・・・。やはり、改行とスペースが勝手に入ってしまうようです・・・。

他に方法をご存知ないでしょうか?

補足日時:2007/10/07 01:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!