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
[[解決]]
ようやく謎が解けました。。。
ありがとうございます

[上に] [前に] [次に]