sendmailについて教えてください
[上に]
[前に]
[次に]
愛の配達人
2000/02/07(月) 11:17:25
メール送信のCGIを作ってます。
入力フォームから名前と返信先Emailを入力されたとき、
sendmailに食わすFromヘッダとReply-To:ヘッダに
From: 名前 <user@foo.or.jp>
Reply-To: 名前 <user@foo.or.jp>
と書くと(もちろんBase64エンコード済み)、受信したときに
From: 名前 <user@foo.or.jp>@hoge.or.jp
Reply-To: 名前 <user@foo.or.jp>@hoge.or.jp
となってしまいます。
これはsendmailの仕様なのですか?
愛の配達人
2000/02/10(木) 20:37:24
どうしても知りたいので上げさせてください
B-Cus
2000/02/10(木) 20:40:21
その CGI スクリプトを見せて下さい。
愛の配達人
2000/02/10(木) 21:15:04
こうです。
メールはちゃんと送信されます。
require 'jcode.pl';
$sendmail = 'usr/local/bin/sendmail';
$to = 'あいうえお <aaa@bbb,com>';
$from = 'かきくけこ <xxx@yyy.com>';
&jcode'convert(*mes, 'jis');
open(MAIL, "| $sendmail -t");
print MAIL "To: " . &encode($to) . "\n";
print MAIL "From: " . &encode($from) . "\n";
print MAIL "Subject: " . &encode($subject) . "\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "Content-Type: text/plain; charset=ISO-2022-JP\n\n";
print MAIL $mes;
close(MAIL);
exit;
sub encode
{
local($str) = @_;
local($tmp) = '';
local($padding) = '';
&jcode'convert(*str, 'jis');
pos($str) = 0;
while ($str =~ /(.{1,45})/gs) {
$tmp .= substr(pack('u', $1), 1);
chop($tmp);
}
$tmp =~ tr|` -_|AA-Za-z0-9+/|;
$padding = (3 - length($str) % 3) % 3;
if ($padding) { $tmp =~ s/.{$padding}$/'=' x $padding/e; }
$tmp =~ s/(.{1,76})/$1\n/g;
$str = '=?ISO-2022-JP?B?' . $tmp . '?=';
$str =~ s/\n//g;
return $str;
}
愛の配達人
2000/02/10(木) 21:16:20
追伸:コマンドベースで試行錯誤しているのでCGIにはなってません。
B-Cus
2000/02/10(木) 21:22:56
require 'jcode.pl';
$from = 'かきくけこ <xxx@yyy.com>';
jcode::convert(\$from,'euc');
print "From: ",&encode($from),"\n";
実行結果:
From: =?ISO-2022-JP?B?GyRCJCskLSQvJDEkMxsoQiA8eHh4QHl5eS5jb20+?=
普段受け取っているメールと比べると、
決定的な違いがあるよね。
B-Cus
2000/02/10(木) 21:26:05
> jcode::convert(\$from,'euc');
あ、この行は意味ないやね。
愛の配達人
2000/02/10(木) 23:11:52
これでどうでしょう?
・メールは届きます。
・タイトルも読めます。
・本文も読めます。
でも、差出人が
かきくけこ <xxx@yyy.com>@zzz.com ← プロバのドメイン
になります。
(クライアントすべてBecky!で確認、サーバは3箇所で確認)
Base64エンコードのロジックは本からそのままのパクリです。
目的は、"@zzz.com"がついて欲しくないことです。
require 'jcode.pl';
$sendmail = '/usr/bin/sendmail';
$to = 'hoge@foo.or.jp';
$from = 'かきくけこ <xxx@yyy.com>';
$subject = 'いろはにほへと';
$mes = <<"EOF";
あいうえお
あいうえお
あいうえお
あいうえお
&jcode'convert(*mes, 'jis');
open(MAIL, "| $sendmail -t");
print MAIL "To: $to\n";
print MAIL "From: " . &encode($from) . "\n";
print MAIL "Subject: " . &encode($subject) . "\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "Content-Type: text/plain; charset=ISO-2022-JP\n\n";
print MAIL $mes;
close(MAIL);
exit;
sub encode
{
local($str) = @_;
local($tmp) = '';
local($padding) = '';
&jcode'convert(*str, 'jis');
pos($str) = 0;
while ($str =~ /(.{1,45})/gs) {
$tmp .= substr(pack('u', $1), 1);
chop($tmp);
}
$tmp =~ tr|` -_|AA-Za-z0-9+/|;
$padding = (3 - length($str) % 3) % 3;
if ($padding) { $tmp =~ s/.{$padding}$/'=' x $padding/e; }
$tmp =~ s/(.{1,76})/$1\n/g;
$str = '=?ISO-2022-JP?B?' . $tmp . '?=';
$str =~ s/\n//g;
return $str;
}
愛の配達人
2000/02/10(木) 23:14:36
追伸
> From: =?ISO-2022-JP?B?GyRCJCskLSQvJDEkMxsoQiA8eHh4QHl5eS5jb20+?=
普段受け取ってるメールも、メーラーのデータファイルをエディタで直接開くとこのように見えますが・・・
B-Cus
2000/02/10(木) 23:14:53
<xxx@yyy.com> の部分はエンコードしちゃダメってこと。
愛の配達人
2000/02/10(木) 23:22:41
[[解決]]
ようやく謎が解けました。。。
ありがとうございます
[上に]
[前に]
[次に]