
(1)お問い合わせフォームを入力(2)入力データを確認する(3)最後に指定先のメールに送り終了
という具合ですが(3)のところで指定先にメールが届きません。メール自体も送られてこないのですがどのような方法があるのでしょうか?どうか教えていただけないでしょうか?お願いします。
(3)のソースコートです。-------------
&header;
open (KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error.";
# ファイルの内容を1行単位ですべて配列allに読み込む
@all = <KEIJI>;
split(/:/, $_);
if( $_ = $all[0] ){
($time, $name, $mail, $title, $message, $to) = split(/:/);
#送信前処理
&jcode'convert(*subject,'jis');
&jcode'convert(*body,'jis');
# send mail
open(MAIL, "| /usr/lib/sendmail -t");
print MAIL "TO: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n";
print MAIL "Content-Type: text/plain;\n\n";
print MAIL "\n";
print MAIL "---------------------------------------------\n";
print MAIL " 名前:$name\n";
print MAIL " 内容:$body\n";
print MAIL " お名前:$firstname $secondname\n";
print MAIL " かな:$kanafirstname $kanasecondname\n";
print MAIL " 所在都道府県 :$area1 $area2\n";
print MAIL " 電話番号:$telno\n";
print MAIL " 性別:$sex\n";
print MAIL " メールアドレス:mailto:$mailad\n";
print MAIL "お問合わ、ご相談内容:";
print MAIL " $con1\n";
print MAIL "---------------------------------------------\n";
close(MAIL);
&one_message;
}
close(KEIJI);
# フッターを表示するサブルーチン
&footer;
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
単純にパイプでメール送信するのであれば、
#!/usr/bin/perl
$from = "hoge\@hogehoge.hoge";
$to = "hoge\@hogehoge.hoge";
open MAIL, "|nkf -j -m0| /usr/sbin/sendmail -f $from -t $to";
print MAIL "From: $from\n";
print MAIL "Subject: This is a test mail.\n";
print MAIL "To: $to\n";
print MAIL "\n";
print MAIL "ほげほげ\n";
close MAIL;
のようにすれば送れます。
どこが抜けていたかはご覧になればご覧になればわかると思います。
まあ、Fookeyさんの仰るとおりsendmailが正常に動作していればの話ですが。
No.3
- 回答日時:
> &jcode'convert(*subject,'jis');
> &jcode'convert(*body,'jis');
$subject と $body はどこから沸いたのでしょう?
No.2
- 回答日時:
まず、そのマシン上のsendmailの設定は済んでいて、
いつもそのsendmailを介してメールが送れていますか?
それができていないなら、当然、perlからメールを
送ることもできません。
未確認なら、mailコマンドなどで、メールがきちんと
送れることを確認して下さい。
prompt> mail -s TEST_MAIL yourname@your.mail.host.ne.jp
とやると、メールの本文入力モードになるので、
本文を入力して、Ctrl-Dを押します。それで
yourname@...にメールが届けば、sendmailは
ちゃんと動いてます。
以上の確認をしたか、あるいはいつもそのマシンのsendmailを
介してメールを送っていることが明らかなら、sendmailのログや
標準エラー出力をチェックするんですね。sendmailに-vオプションを
指定すれば、チェックモードになってメッセージがいっぱいでます。
ログは/var/log/maillogとか/var/log/syslog、/var/log/messagesに
入ってるはずです。標準エラーは、
open(MAIL, "| /usr/lib/sendmail -t -v >>& /tmp/sendmail-stderr.log") or die $!;
などとして、/tmp/sendmail-stderr.log(名前はなんでもいいです
けど)をチェックして下さい。原因を特定しないことには
どうにもならないですから。
あと、私には直接sendmailを起動する意図がよく分らないです。
sendコマンドとかimputコマンドを使わないんですか?
imputはメールの整形やヘッダのMIMEエンコード、JISへの変換など
勝手にやってくれますよ。さらには、CGIが動いてるローカル
マシンではない、リモートサーバ上のsendmailを利用することも
可能です。その場合、同一組織内のサーバでない限り、はじかれますが。
ですから、ローカルマシンのsendmailがちゃんと設定されていない場合、
いつも利用している同一組織内の別のサーバ上のsendmailを
使った方が簡単です。
なお、imputを使うには、imパッケージがインストールされてないとダメです。
意地でもsendmailを使いたいなら、selenityさんが仰るように、
まだやることがあります。
1.ヘッダ部分のBase64エンコーディング
jcodeではなく、Jcodeパッケージを使って、
print MAIL "Subject: ", Jcode->new($subject)->mime_encode, "\n";
To:, From: なども同様。
2.print MAIL " 名前:$name\n"; の「名前」など、
変数以外の部分は確かにJISですか?
そんなに一生懸命JISへの変換をしなくても、
open(MAIL, "| nkf -j | /usr/lib/sendmail -t") or die $!;
とやって、nkfを噛ましてやれば、全部JISに変換してくれます。
nkfがインストールされてないようなら、インストールする
価値はあると思いますよ。
3.まあ、クリティカルな問題ではないですが、お行儀よくするなら、
Content-TypeとかMime-Versionとかのヘッダエントリも入れましょう。
最後に、細かいことですが、
open(FH, "....") || die $!;
よりも、
open(FH, "....") or die $!;
ですよね。open()のC記法をずっと遵守するなら
問題ないですが、そのうちにperlの手抜き記法に慣れて
open FH, "..." || die $!;
とかやり出すと、優先順位の関係から、エラー検出が
できなくなります。
No.1
- 回答日時:
perlはほとんど使ったことがないのでよくわかりませんが、このコードだとメールを送る送らない以前の問題があるようにみえます。
Mime関連の設定は
---
"Content-Type: text/plain; charset=\"iso-2022-jp\""
"Content-Transfer-Encoding: 7bit"
"Mime-Version: 1.0"
---
と書くのが正式(?)ですし、
---
&jcode'convert(*subject,'jis');
print MAIL "Subject: $subject\n";
---
となっていますが、
print MAIL "Subject: $subject\n";
の$subjectの部分はMime-Encodeする必要があります。
To,Fromの部分に関しても日本語を使用しているのであれば、Mime-Encodeは必須です。
さらに
---
&jcode'convert(*subject,'jis');
&jcode'convert(*body,'jis');
---
とJISに変換していても、肝心なメールの本文の部分はEUCまたは、Shift-JISのままなのではありませんか?
だとすると、漢字コードが入り交じったメールが送信されませんか?
8bitコードが含まれているためsendmailが拒否している可能性はありませんか?
このままでは受け取ったほうが迷惑します。
それとも最近のsendmailって勝手に漢字コードの変換を行ってくれるのでしょうか?
何事も基本が大切です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- PHP php 完了画面の送信メールのコードを書いているのですが・・・ 2 2023/06/02 12:01
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- 英語 この"e-mail"が複数形でもなく、無冠詞なのはなぜですか? 「表現のための実践ロイヤル英文法」に 1 2022/07/10 16:12
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Sendmailで送信。メアドが違う...
-
sendmailができない
-
Perl からbashを呼び出したい
-
sendmailで複数の宛先にメール...
-
JSONで文字列が長い時
-
Application.ScreenUpdating = ...
-
Did you name your dog Koro? ...
-
formで特定のinputを送信しない...
-
<SELECT>タグの折り返し
-
VBAでPDFのコピーとリネームを...
-
Fire fox の 文字化けを解消...
-
セレクトメニューについて
-
複数列を持ったリストボックス...
-
既存のデーターを開く方法
-
Linux(Ubuntu)における、ワンラ...
-
デ-タテ-ブルの内容での更新...
-
Telnetモジュールで繋がりません。
-
プルダウンで別項目に値を代入...
-
10進数→2進数の出力について
-
pythonで演算子を変数に代入す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sendmailのFROMに日本語を使う
-
Perlからメール送信で文字化け
-
sendmailで複数の宛先にメール...
-
perl フォームメール送信の...
-
CGI メールフォームからBCCのア...
-
フォームメールの自動返信について
-
メールフォームを作成したいの...
-
サーバー内のテキストデータを...
-
フォームの日本語が文字化け
-
sendmailで送信したメールが届...
-
sendmailについて
-
Sendmailで送信。メアドが違う...
-
sendmailで本文が文字化けします
-
メーラーに自動的にメッセージ...
-
Perlにて、sendmailを使用する...
-
Perl メール 初心者
-
sendmailが上手く動かないのか...
-
Perl からbashを呼び出したい
-
自動返信について
-
Perl SendMail Bcc メルマガ
おすすめ情報