こんにちは。
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 ・・・>の間(つまり画像と画像の間)にスペースが入ってしまいます。
この場合どのような対策を行えばよろしいのでしょうか?
説明が分かりにくくて申し訳ありませんが、どなたかよろしくお願いします。
No.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;
ありがとうございます。
原因がプログラムというより、サーバーの設定にあることが判明し、設定を変更したところうまく表示されるようになりました。
ずっと私のプログラムの問題だと思って試行錯誤を重ねておりましたが、まさかサーバーの設定に問題があるとは・・・。
何度もご丁寧に教えていただきありがとうございました。
No.2
- 回答日時:
$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行で送る方法っていうのは不可能なのでしょうか?
No.1
- 回答日時:
この回答への補足
早速ありがとうございます。
MIME::Liteモジュールを使ってみたのですが、結果としては同じ事となりました・・・。やはり、改行とスペースが勝手に入ってしまうようです・・・。
他に方法をご存知ないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- HTML・CSS CSSがなぜかfont-sizeだけ効かない...記述がまちがっているんでしょうか 5 2022/04/09 17:52
- HTML・CSS htmlの文字が縦書きになる 2 2023/03/01 21:31
- HTML・CSS html cssのmargin 5 2022/12/03 11:04
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- HTML・CSS HTMLで特定の文字だけ色を変えたいのですが、指定した色と違う色が反映してしまいます。 下記、「前」 5 2023/06/27 12:08
- HTML・CSS htmltとcssの連携をして画像縮小について 1 2022/11/15 20:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HTMLからimgのsrcのみを正規表...
-
Vb.net2005での画像の合成方法
-
画像を入れ替えたい
-
複数画像のランダム複数表示(...
-
テキストにマウスオーバーで画...
-
JavaScriptで変更した属性の元...
-
MFCで画像を表示させているので...
-
MAX関数を使ってからLEFT JOIN...
-
c++std::string型をTCHARに変換...
-
htmlの記述で link rel=styles...
-
JQueryで画像の上で文字を動かす
-
ロールオーバー効果にならない。
-
jspでcssが読み込めない
-
スライダーを実装した場合、ペ...
-
離れた場所にマウスオーバーで...
-
フォントサイズの変更
-
変数内容をHTML内で表示する方法
-
javascriptでURLにマウスオーバー
-
1行で左寄せと右寄せと中央揃え...
-
document.getElementById( ).st...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JavaScriptで変更した属性の元...
-
MFCで画像を表示させているので...
-
画像が表示でnull; this.src
-
error LNK2019 未解決のシンボ...
-
Vb.net2005での画像の合成方法
-
onclickで画面が固まる・・・ら...
-
リンク先を動的に変更する
-
(javascript)HTMLで指定した...
-
【OpenCV】二値画像後、白の部...
-
jQuery 複数のfind()
-
ラズパイでno module named zbar
-
外部javascriptの重複を防ぐには
-
条件分岐でキーが入力されてい...
-
かぶらないランダム画像
-
HTMLからimgのsrcのみを正規表...
-
pythonで、tkinterとpillowの組...
-
OpenCV での画素値の比較について
-
imgボタンにfocusの当て方
-
指定したフォルダの画像を一括...
-
OpenCVでサンプルコードを使う...
おすすめ情報