秘密基地、どこに作った?

sendmailコマンドでは、-f オプションでfromアドレスを指定しない場合、お客様のBIGLOBEメールアドレスがfromアドレスに設定されてメール送信がされます。

↑と記載されているので-fオプションを設定したいのですが、↓に書き足すにはどの様に記載したら良いでしょうか?

if ($sendmail) {send_mail($sendmail,'',$subject,$masteremail,'','','',$msg)}

if ($sendmail) {send_mail($sendmail -f ***@***.ne.jp,'',$subject,$masteremail,'','','',$msg)}

↑だとBIGLOBEメールアドレスのまま届いてしまいます。

A 回答 (3件)

perl-lib.pl をよくよくのぞいてみましたところ、


sendmailコマンドで-fオプションを指定できるように書き換える必要があります。

perl-lib.pl 212行目付近の send_email 関数は、
以下のような構造となっています。
(かなり省略しました)

------------------------------------------------------------------------------
sub send_email {
my($sendmailpath, $uuencodepath, $subject, $from, $to, $cc, $bcc, $body, $files, $encoding, $separator) = @_;
... 略
if ( $sendmailpath =~ /blatj/i ) {
... 略
} elsif ( -e $sendmailpath ) {
... 略
if (open(MAIL,"| $sendmailpath -t")) {
... 略
} else { $err = 'Error Open sendmail Failure'; }
} else { $err = 'Error Not sendmail Utility'; }
$err;
}
------------------------------------------------------------------------------


この

if (open(MAIL,"| $sendmailpath -t")) {

という行を、

if (open(MAIL,"| $sendmailpath -f $from -t")) {

と書き換えればよい。


ところで、回答ANo.1 の補足に貼り付けられたコードで、
CGIプログラム中での send_email 関数の呼び出し箇所

if ($sendmail) {send_email($sendmail,'',$subject,$masteremail,$masteremail,'','',$msg)

if ($sendmail) {send_email($sendmail,'',$subject,$masteremail,$masteremail,'',$bcc,$news)

のように、from と to の両方に同じ変数 $masteremail を渡しているのですが、これは問題ないのでしょうか??
    • good
    • 0
この回答へのお礼

perl-lib.pl の指示して頂いた場所を書き換えて試したところ
送信者アドレスからBIGLOBEメールアドレスが消えました^^
何度もお手数を掛けて申し訳ありませんでした。

また、from と to の両方に同じ変数が渡っているので、送信者と受信者が
同じアドレスになりますが、mailは届いているのでOKです。

本当に丁寧に教えて頂け助かりました。
心よりお礼申し上げます。ありがとうございました。

お礼日時:2007/10/24 17:31

補足にはりつけられたソースコードの行を見ると、


関数名は、send_mail ではなく、send_email のようです。

そのCGIプログラム中で、関数 send_email を定義していないのならば、

ひょっとして、汎用関数ライブラリ perl-lib.pl をお使いではないでしょうか?

ソースコードに次のような記述がないでしょうか?

require 'perl-lib.pl'


perl-lib.pl のソースコードを見ると、
send_email 関数は、4番目の引数に
-f オプションをつけて、sendmail コマンドに渡しています。

呼び出す側では、4番目の引数は、$masteremail となっています。

if ($sendmail) {send_email($sendmail,'',$subject,$masteremail,$masteremail,'','',$msg)

↑この行より手前で、変数 $masteremail に、設定したいFromアドレスを代入してやればよいでしょう。

参考URL:http://www.tryhp.net/perllib.htm

この回答への補足

require 'perl-lib.pl' の記述ありました。
$masteremail = '*****@*****.co.jp' を教えて頂いた箇所に入れましたが駄目で
if ($sendmail) のある全ての前に3箇所同時に入れたりもしてみましたが駄目でした。

諦めモード入って来ました…色々教えて頂いたのに申し訳ありません。

補足日時:2007/10/23 10:32
    • good
    • 0

そのCGIプログラムは記述言語は何でしょう?


Perl でしょうか?

Perl だとして話をすすめてしまいます ^^;

send_mail(...) は、sendmailコマンドではなく、send_mailという名前の関数をよびだしています。

その関数は、そのプログラムの別の箇所もしくは別のファイルで次のように定義されているはずです。

sub send_mail {
... 略
}

探してみてください。

そのなかでsendmailコマンドにメールを渡す処理が
書かれているはずなので、
そちらに -fオプションを書き足せばよいでしょう。

この回答への補足

レスありがとうございます。

記述言語はPerlです。
教えて頂いたものを探したのですが見つからなくて…
UPするCGIもこれ一つです。

sendで検索してかかったものは下の6行です。

$sendmail = '/usr/lib/sendmail';

print "<input type=hidden name=cgi_action value=sendmail>\n";

elsif ($QUERY{'cgi_action'} eq 'sendmail')

if ($sendmail) {send_email($sendmail,'',$subject,$masteremail,$masteremail,'','',$msg)

if ($sendmail) {send_email($sendmail,'',$subject,$masteremail,$masteremail,'',$bcc,$news)

if ($sendmail) {send_email($sendmail,'',$subject,$masteremail,$QUERY{'E-Mail'},'',$masteremail,$msg)

最後の3つは先だっての質問でお答え頂いたので違いますよねぇ
とすると3行目かと思い
elsif ($QUERY{'cgi_action'} eq 'sendmail -f ***@***.co.jp')
としてみましたが駄目でした。
ご意見頂けますようお願いします。

補足日時:2007/10/21 17:20
    • good
    • 0

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


おすすめ情報