釣りや商売とは関係ないのですが困り事が解決したので世間への覚書として記しておきます
世間は広いので同じように困っている人がいるかもしれませんので
おそらく初歩的な問題だとは思いますが素人には全く理解できない領域の話
コンピュータエキスパートさんが読むのはかまいませんが馬鹿にしないでくださいね
-------------- アングラーは読む必要がありません -------------------
2021年末、借りているサーバーの機器が更新されたら10数年前からのショッピングカートが不具合を起こした
pearlもろくに知らないがいろいろ調べた結果、Jcode.plが古すぎてサポートされないと判明しJacode.plに変更してなんとか見られるようにはなったが
素人仕事ではここまで、テストで買い物をしてみると受発注メールが届かない!
サーバー会社のサポートに問い合わせるが、プログラム内部の問題らしいので解決しない
これはもう20年使ってきたウェブサイトを諦め、全面的にヤフーショッピング店へ移行するのか?
ヤフーショッピングは集客力は格段に強いがページあたりの商品や画像の数などに制約があるため使い勝手が悪い
さてさて困り果てました、というところに救いの手が
友人の娘婿が携帯向けソフトの開発をしているという事で半ば無理やり見てもらえることになったのだ
とはいえpearlは使ってないという事でどうなるか・・・・・
-----チェック編----
すべてをUSBメモリーに託してまずは基礎部分をチェックもらう
・メールの内容自体は正確に出力されている
→文字コードもJISなため、jcode convert処理は正常に作動している
→なので、jacode.plは変更不要(継続利用可能)
・メールの内容が仕様通りということは、メール送信処理に不具合がある
→処理のコード自体はおそらく正確に記述されている
→オプションのハイフンtを利用した処理も無関係と思われる(未検証)
→エラー時のメールが返ってこなかったため、サーバ側で紛失している可能性大
判明した状況から、本事象はサーバのメール処理の問題と思われます。
下記のご確認をお願いいたします。
・レンタルサーバーの会社、もしくは自前サーバー機器の利用の有無
・587番ポートの開放の有無
→原理はこちらをご参照ください。 https://masuipeo.com/tech/port587.html
→自前のサーバを使用している場合等に影響があるようです。
→確認はこちらからできると思います。 https://www.cman.jp/network/support/port.html
・サーバにおけるsendmailの呼び先(mart_init.cgiファイルの155行目付近。/usr/lib/sendmailで正しいのか)
→会社によって異なるようですが、/usr/lib/sendmail か /usr/sbin/sendmail のどちらかのようです。
→最悪、どちらか上手くいったほうにすればOKですので、確認の優先度は低いです。
----メールチェック編----
メールを確認したところ、複数送っていたテストメールの一部が遅れて受信できていました。
当該メールを送信した時の状況ですが、・test20220109.cgiの中でTo、From等を個別に文字列で設定していた。
→考えられる原因は二つです。
1.日本語が介在していなかった
2.foreachループを通過していなかった
→debug.textに書き出したメール内容は正常だったため、1が問題だと思われますが、
2の原因の切り分けも含めて下記のテストを実施します。
・日本語を一切介在させずにフォームを通過させ、foreachループを通過させメールで送信する
・foreachループをコメントアウトし、debug.textを変数に格納しメールで送信する
----メールが届くようになった----
テストページを経由して、テストメールを発行しました。
ひとまずメールの送受信に関しては解決できたかと思われます。
処理のテストを行ったところ、foreach文の処理に不具合があることが分かりました。
また、文字コードの変換処理をまとめて行うよう変更したため、
当環境では問題がなくとも相手のメールソフト次第では文字化けの可能性もあります。
こちらはgmail以外のメールソフトで確認する必要があります。
----解決編まとめ----
◆問題と原因について
サーバが切り替わってからのjcode.plによる不具合
→Perlのバージョンアップの影響で、jcode.plが動かなくなる事象が報告されています。
詳細は下記のURLをご覧ください。
https://piano2nd.smb.net/PukiWiki/index.php?jcode.pl
メール送信不具合について
→2種類の原因が存在していました。
1.sendmailのパスが異なっていた
→旧サーバでは「/usr/lib/sendmail」、新サーバでは「/usr/sbin/sendmail」です。
2.foreachの不具合
→メール送付処理周りで、foreachを用いて1行ずつ文字コードをJIS形式に変更する処理がありますが、
事象発生前はメールヘッダ部分から本文までのメール全てに対しJIS形式エンコードを行っておりました。
これは本来は問題のある処理で、メールヘッダ部分の日本語(件名)に関してはBase64形式でエンコードする必要があるようです。
旧サーバではこの処理が偶然すり抜けて実行できていたようですが、
新サーバになって厳密な処理が求められた結果、日本語を含む件名が文字コードで引っ掛かり、
恐らくサーバ側でメールがスパムとして削除されていたものと思われます。
解決、および懸念事項について
jacode.plの扱い
長期的にはEncode.pmへの切り替えが望ましいと思われますが、
現状あるサイトを使い倒すという意向でしたら切り替えの必要はありません。
メール送信不具合について
1.sendmailのパス
→新パスを記述したファイルをお渡しします。
旧パスについてもコメントアウトで残しておきますので、
再度サーバを変更した際には使える方を使用して頂ければと思います。
2.文字コード変更処理について
→こちらも処理を変更したファイルをお渡しします。
変更後の処理ですが、メールヘッダ部分をforeach処理の外に出し、
jcode convertをメール本文のみに実行するという内容となっております。
以上の90パーセント以上は理解していないが、
受発注メールに関する問題は解決しMilestone Onlineでお買い物できるようになりました
世間は広いので同じように困っている人がいるかもしれませんので
おそらく初歩的な問題だとは思いますが素人には全く理解できない領域の話
コンピュータエキスパートさんが読むのはかまいませんが馬鹿にしないでくださいね
-------------- アングラーは読む必要がありません -------------------
2021年末、借りているサーバーの機器が更新されたら10数年前からのショッピングカートが不具合を起こした
pearlもろくに知らないがいろいろ調べた結果、Jcode.plが古すぎてサポートされないと判明しJacode.plに変更してなんとか見られるようにはなったが
素人仕事ではここまで、テストで買い物をしてみると受発注メールが届かない!
サーバー会社のサポートに問い合わせるが、プログラム内部の問題らしいので解決しない
これはもう20年使ってきたウェブサイトを諦め、全面的にヤフーショッピング店へ移行するのか?
ヤフーショッピングは集客力は格段に強いがページあたりの商品や画像の数などに制約があるため使い勝手が悪い
さてさて困り果てました、というところに救いの手が
友人の娘婿が携帯向けソフトの開発をしているという事で半ば無理やり見てもらえることになったのだ
とはいえpearlは使ってないという事でどうなるか・・・・・
-----チェック編----
すべてをUSBメモリーに託してまずは基礎部分をチェックもらう
・メールの内容自体は正確に出力されている
→文字コードもJISなため、jcode convert処理は正常に作動している
→なので、jacode.plは変更不要(継続利用可能)
・メールの内容が仕様通りということは、メール送信処理に不具合がある
→処理のコード自体はおそらく正確に記述されている
→オプションのハイフンtを利用した処理も無関係と思われる(未検証)
→エラー時のメールが返ってこなかったため、サーバ側で紛失している可能性大
判明した状況から、本事象はサーバのメール処理の問題と思われます。
下記のご確認をお願いいたします。
・レンタルサーバーの会社、もしくは自前サーバー機器の利用の有無
・587番ポートの開放の有無
→原理はこちらをご参照ください。 https://masuipeo.com/tech/port587.html
→自前のサーバを使用している場合等に影響があるようです。
→確認はこちらからできると思います。 https://www.cman.jp/network/support/port.html
・サーバにおけるsendmailの呼び先(mart_init.cgiファイルの155行目付近。/usr/lib/sendmailで正しいのか)
→会社によって異なるようですが、/usr/lib/sendmail か /usr/sbin/sendmail のどちらかのようです。
→最悪、どちらか上手くいったほうにすればOKですので、確認の優先度は低いです。
----メールチェック編----
メールを確認したところ、複数送っていたテストメールの一部が遅れて受信できていました。
当該メールを送信した時の状況ですが、・test20220109.cgiの中でTo、From等を個別に文字列で設定していた。
→考えられる原因は二つです。
1.日本語が介在していなかった
2.foreachループを通過していなかった
→debug.textに書き出したメール内容は正常だったため、1が問題だと思われますが、
2の原因の切り分けも含めて下記のテストを実施します。
・日本語を一切介在させずにフォームを通過させ、foreachループを通過させメールで送信する
・foreachループをコメントアウトし、debug.textを変数に格納しメールで送信する
----メールが届くようになった----
テストページを経由して、テストメールを発行しました。
ひとまずメールの送受信に関しては解決できたかと思われます。
処理のテストを行ったところ、foreach文の処理に不具合があることが分かりました。
また、文字コードの変換処理をまとめて行うよう変更したため、
当環境では問題がなくとも相手のメールソフト次第では文字化けの可能性もあります。
こちらはgmail以外のメールソフトで確認する必要があります。
----解決編まとめ----
◆問題と原因について
サーバが切り替わってからのjcode.plによる不具合
→Perlのバージョンアップの影響で、jcode.plが動かなくなる事象が報告されています。
詳細は下記のURLをご覧ください。
https://piano2nd.smb.net/PukiWiki/index.php?jcode.pl
メール送信不具合について
→2種類の原因が存在していました。
1.sendmailのパスが異なっていた
→旧サーバでは「/usr/lib/sendmail」、新サーバでは「/usr/sbin/sendmail」です。
2.foreachの不具合
→メール送付処理周りで、foreachを用いて1行ずつ文字コードをJIS形式に変更する処理がありますが、
事象発生前はメールヘッダ部分から本文までのメール全てに対しJIS形式エンコードを行っておりました。
これは本来は問題のある処理で、メールヘッダ部分の日本語(件名)に関してはBase64形式でエンコードする必要があるようです。
旧サーバではこの処理が偶然すり抜けて実行できていたようですが、
新サーバになって厳密な処理が求められた結果、日本語を含む件名が文字コードで引っ掛かり、
恐らくサーバ側でメールがスパムとして削除されていたものと思われます。
解決、および懸念事項について
jacode.plの扱い
長期的にはEncode.pmへの切り替えが望ましいと思われますが、
現状あるサイトを使い倒すという意向でしたら切り替えの必要はありません。
メール送信不具合について
1.sendmailのパス
→新パスを記述したファイルをお渡しします。
旧パスについてもコメントアウトで残しておきますので、
再度サーバを変更した際には使える方を使用して頂ければと思います。
2.文字コード変更処理について
→こちらも処理を変更したファイルをお渡しします。
変更後の処理ですが、メールヘッダ部分をforeach処理の外に出し、
jcode convertをメール本文のみに実行するという内容となっております。
以上の90パーセント以上は理解していないが、
受発注メールに関する問題は解決しMilestone Onlineでお買い物できるようになりました
※コメント投稿者のブログIDはブログ作成者のみに通知されます