ゲストブックに投稿があった際、メール(sendmail)で通知するように改造中です。
メールを送信するには、件名をMIMEエンコードするのが決まりだと知りましたが、下記の送信処理には含まれていないのでしょうか?
また、送信処理に不備があるようでしたら、アドバイスを頂ければありがたいです。
送信処理は以下の通りで、書き込み処理(ログファイルに書き込む処理)の直後に加えています。
投稿者は「$in{'name'}」で、投稿内容(本文)は「$in{'body'}」です。
CGIの漢字コードはシフトJISで、改行コードはCR+LFです。
# sendmailのパス
$sendmail = '/usr/sbin/sendmail';
# 送信先
$tomail = 'ooooo@ooooo.ne.jp';
# 送信者
$frommail = 'xxxxx@xxxxx.ne.jp';
# 件名
$subject = "ゲストブックに投稿がありました";
# 送信
open (OUT,"|$sendmail -t");
$send = "";
$send .= "To: $tomail\n";
$send .= "From: $frommail\n";
$send .= "Subject: $subject\n";
$send .= "\n";
$send .= "【 名 前 】 $in{'name'}\n\n";
$send .= "【 内 容 】 $in{'body'}\n\n";
&jcode'convert(*send,'jis');
print OUT $send;
close (OUT);
それから、もうひとつ気になることがあります。
投稿された際に送信される時とされない時があり、4~5時間後にまとめて届くこともありますが、届かないままのものもあります。
届かなかったメールはどこに行ってしまったのでしょうか?
サーバの管理者へ届く・消えてしまう場合、私宛にエラーメール(?)を返すことはできないでしょうか?
差し支えなければ、こちらについてもアドバイス頂けると嬉しいです。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
(1)件名をMIMEエンコードする処理
このソースにはエンコード処理は入っていません。Jcodeの$j->mime_encode メソッドを使いましょう。
(2)エラーメール
SMTPでエラーが出ている物に関しては、sendmailに-fオプションでエラー時のメールの飛び先を指定することで受け取ることができるかもしれません。お試し下さい。
ただし、エラーにもいろいろあります。遅延はエラーではないのでエラーメールは返ってきませんし、SMTPでは正常に受領されるのに、改めてreply-toなど宛てにエラーのお知らせメールを送ってくるプロバイダもあります。迷惑メール対策として、User Unknownなのに正常で受け取ったふりをしてそのまま捨ててしまうプロバイダもあったりします。メールの送信に関しては、 100% 正確にエラーを拾うのは難しいです。
この回答への補足
書くところがないので、こちらに書き込みます。
sendmailを利用してメールを送信する場合の正しい知識というのは、どういうサイトや書籍を参考にすればよいのでしょうか?
サイトによって記述がバラバラで、どれが正しいのか、最低限処理しなければならないものがどれなのかすら分かりません。
参考になるサイトや書籍をご存じの方がいらっしゃいましたら、アドバイス頂けると嬉しいです。
16日に引っ越しをするので、数週間アクセスできません。
ですから、16日の夕方くらいまでに1さん・2さん・その他の方からお返事がない場合は、締め切りたいと思います。
それまでに何かありましたら、ご指摘・ご指導よろしくおねがい致します。
長文、失礼しました。
お返事が遅くなり、申し訳ありませんでした。
私が書き込んだ処理には、MIMEエンコード処理は含まれていないのですね。
書き込んだ処理は、検索してsendmailでメールを送信する方法を知り、そのソースをそのまま(使用している変数などを書き換えて)利用させてもらっています。
検索した結果、「件名をMIMEエンコードをしなくてはいけない」と書いてあるところや、「base64というものにエンコードしなくてはいけない」という記述もありました。
ですが、私が書き込んだ処理だけで簡単にメールが送れると書いてあるところが多くありましたので、その処理だけを施して送信しても問題ないのかとも思えますが、やはり差し支えがあるのでしょうか?(他の受信環境で文字化けが起こるなど)
sendmailを使うのが初めてなので、基本的な事を理解しておらず、何がなんだか分からない(どの記述が正しいのか判断できない)とのが現状です。
Jcodeというのは、Jcode.pmのことでしょうか?
モジュール(?)を使ったことがないので、インストールする方法や利用方法も分かりませんし、時間が取れるようになったら検討したいと思います。
エラーメールの件。
open (OUT,"|$sendmail -t -f");
という風に書き換え、何度かテストしてみましたが、送られてくるはずのメールもエラーメールも届きませんでした。
しかし、丸一日経過して遅れて届く場合もあるので、もうしばらく様子を見たいと思います。
メールが何処にも届かず行方不明になっているのか、エラーでサーバ管理者に届いているのか、単に遅れているだけなのか、エラーが返って来るとそれらを判断する材料になるのではないかと思っただけですので、できないのであればそれで構いません。お手数をお掛けしました。
丁寧にお答え頂いて本当にありがとうございました。
エラーメールに関しては、見て回ったサイトよりも分かりやすく、大変勉強になりました。感謝致します。
No.1
- 回答日時:
・4~5時間後にまとめて届く
現在使用されているサーバのメール送信の処理が
非常に重たい状態だと推測できます。
ご使用されている、サーバを管理している人に
「メールの遅延」起きているか確認をとってみはどうでしょうか?
---
・サーバの管理者へ届く・消えてしまう場合、私宛にエラーメールを返すことはできないでしょうか?
メールが正常に動作しない状態のようですので、
ログに書き込んでみては?
Open(LOG,">>mail.log");
print LOG $send;
close (LOG);
お返事が遅くなり、申し訳ありませんでした。
メールがまとめて届くのは、恐らくメールの遅延が原因かと思います。
しかし、届かないままになっているものは、何処へ行ってしまったのでしょう?
届いたり届かなかったりするのであれば、ゲストブックに投稿があった際に通知する意味がないので、もう少し安定して届くようにならないかと、頭を悩ませています。
ちなみに、3件の書き込み(メール通知)があった場合、一通は数時間遅れで届き、一通は行方不明、残り一通は瞬時に届くか数時間遅れで届いている状態です。
現在は動作確認中なので、送信先も送信者も私自身ですが…。
教えて頂いた通りにログに書き込んでみたのですが、正常(期待通り)に書き込まれていました。
また、メール通知処理の直前に投稿内容をログに書き込む処理があるのですが、そちらも問題なく書き込まれています。
ローカルだときちんと動作し、メールも全て届くので、もしかするとサーバ側に問題(?)があるのかもしれません。
今は時間が取れませんが、落ち付いたらサーバ管理者に問い合わせてみようと思います。
丁寧にお答え頂いて本当にありがとうございました。感謝致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセル VBA メール本文に指定セルに記載されているURLをリンクとして記載する方法 8 2022/08/08 07:50
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- 英語 相手の言っている意味が分かりません(英語でのメールです) 1 2022/06/09 16:58
- PHP php 完了画面の送信メールのコードを書いているのですが・・・ 2 2023/06/02 12:01
- 戦争・テロ・デモ ウクライナ、メル友に五千円要求されてさ 1 2022/04/02 09:38
- 英語 催促のときの英文 6 2022/06/16 00:01
- UNIX・Linux iptablesを設定するとメール送信処理が遅くなる!? 6 2022/06/07 01:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでoutlook365が起動しません。
-
プロキシ経由でjavamailを使っ...
-
【C言語】メールを送信するプロ...
-
送信先のメールアドレスが存在...
-
Excel VBAでリンク切れをチェッ...
-
例外処理のフローチャートの記...
-
ユーザー定義関数に#NAME?が返...
-
VBA This Workbookモジュール...
-
SOAP::Liteを利用したい!
-
Cからシェルを起動し返り値をハ...
-
「デバイスは PRN を初期化でき...
-
エクセルVBAで標準モジュー...
-
ユーザーフォーム上に表示され...
-
VBでグローバル変数を宣言するには
-
Excel VBA 『Call』で呼び出す...
-
”:”がいっぱいの文について。
-
bashのgrepで複数の検索、かつ...
-
偶数/奇数の判定
-
Perlソースコードをコンパイル...
-
Access VBA標準モジュールにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでoutlook365が起動しません。
-
【C言語】メールを送信するプロ...
-
CDO.Messageを使ったVBScript
-
Net::SMTPでメールを送信したい...
-
さくらインターネットでの添付...
-
フォームデータ-の送信時の確認...
-
VBAでsmtp認証をするには?
-
メールフォームCGIを探していま...
-
Clipmail3.0 確認画面の非表示...
-
VBScriptで、メールの送信をし...
-
ASPでのsendmail(BASP21の使用...
-
リンクをクリックするだけでC...
-
javamailでメール送信ができません
-
プロキシ経由でjavamailを使っ...
-
Windowsメールを別アプリから操...
-
Exchangeを使用したメール送信...
-
LotusScript メール作成方法が...
-
c#で 簡単なメール(添付ファ...
-
BASP21使用のメール送信でコマ...
-
C#のメール送信時のエラーについて
おすすめ情報