python_PHP チュートリアルに基づいたメール送信時の文字化け問題の解決策
企業プロジェクトでは、電子メールをバックグラウンドで送信する必要があり、電子メールの内容には画像の添付ファイルが含まれます。 PHPmailer 経由で送信した場合、メール サーバーで遅延が発生する可能性があるため、PHPmailer 経由で電子メールを送信すると、結果が返されるまで電子メールが正常に送信されるまで待機する必要があります。これは、電子メールを送信してもすぐに結果が返されない場合があり、影響を受けることが実際に証明されています。ユーザーエクスペリエンス。
そこで、Pythonでメールを送信し、PHPはスクリプトを呼び出してメールを呼び出し、メールが正常に送信されたかどうかを判断せずに、スクリプトの実行に成功したらすぐに戻るようにしました。スクリプト ファイルが正常に実行される限り、成功フラグがクライアントに返されます。これにより、電子メールの送信速度が大幅に向上し、優れたユーザー エクスペリエンスが保証されます。
しかし、Pythonでメールを送信する際に文字化けという問題に遭遇しました。デバッグプロセス中に、次の現象が発生しました:
1. 中国語と英語の組み合わせが文字化けします。
2. メールに返信した人の名前は漢字2文字ですが、漢字3文字が文字化けしています。この問題は非常に隠されており、私は今日初めてこの問題を発見したため、上司の前で同じ間違いを 2 回犯してしまいました。私のテストはOKでした(私の名前は2文字です)が、3文字をテストしなかったため、ここで問題が発生するとは予想していませんでした。
3. メールの件名が文字化けしています
4. すべて正常ですが、メールの「返信」をクリックすると、表示される内容の一部が文字化けします。
5. 内容の問題が解決した後、返信の名前も文字化けしていることがわかりました。また、QQメールボックスは正常、foxmailは正常、163は正常、gmailは正常ですがoutlookは文字化けします。
通話環境:
1. PHP では、返信者、返信メール、送信メール、ファイル名などをスクリプトのパラメータとして使用し、便利に実行するために cmd コマンドを呼び出します。パラメータとして、一部の文字は特殊文字です。たとえば、アンパサンド、一重引用符、二重引用符などの問題です。もう 1 つの問題は、各パラメータの間にスペースを入れることができないことです。スペースが含まれる場合、パラメータの順序が崩れます。
つまり、文字化けの問題は完全に解決することはできません。結局、他に方法がなかったので、以下の方法を採用して、最終的にコード化けの問題を解決しました。
PHPでは、件名、返信名、メールアドレス、内容など、送信するメールの内容を設定ファイルに書き込みます。この設定ファイルの名前はランダムで、ファイルディレクトリは一時ディレクトリにあります。 PHP。必ず複数人で使用してください。次に、PHP で Python スクリプトを呼び出すときに設定ファイル名 (パスを含む) を渡し、Python で設定ファイルを読み込んで処理します。この場合、トピックと返信者、つまり漢字が含まれる部分が163で文字化けしています(コンテンツ部分は現時点では未検証です。トピックと返信者に漢字が含まれる部分は文字化けしていると判明しています)。 163 メールボックスではありますが、QQ メールボックスでは文字化けはなく、すべて正常です)、解決策は、Header("xxxx", "utf-8") を介して utf8 に変換することです。すべて正常です。
以下の関連コードを共有してください:
PHPはPythonスクリプトを呼び出します
//ini設定ファイルを生成します
$sampleData = array(
'mail' => array(
'subject' = >'こんにちは、あなたの友人があなたにメールを送りました - xxx Co., Ltd. から転送',
'ReplyToName' =>$send_name,
'ReplyToMail' =>$send_email,
'To' => ;$receive_email,
'file_name' =>realpath($target_path),
)
);
$filename=getUnique().'.ini';
write_ini_file($sampleData,'D:/PHP/Php/tmp /'.$filename, true) ;
$cmd='start mmail.py '.$filename;
$r=exec($cmd,$out,$status);
if(!$status)
echo 'ok '
else
echo 'fail'
python メール送信スクリプト
# -*- コーディング: utf-8 -*-
import smtplib
import email.MIMEMultipart# import MIMEMultipart
import email.MIMEText# import MIMEText
import email.MIMEBase# import MIMEBase
import os.path
import sys
from email.header import Header
import mimetypes
import email.MIMEImage# import MIMEImage
import ConfigParser
import string
inifile=u'D:/PHP/Php/tmp/' + sys.argv[1]
config=ConfigParser.ConfigParser()
config.read(inifile)
os.remove(inifile)
subject=Header(config .get("mail","subject"),"utf-8")
ReplyToName=config.get("mail","ReplyToName")
ReplyToMail=config.get("mail","ReplyToMail")
To =config.get("メール","宛先")
file_name=config.get("メール","ファイル名")
From = "%s
server = smtplib.SMTP("smtp.exmail.qq.com",25)
server.login("xxxx_business@5186.me","itop202") #SMTPサーバーが検証を必要とする場合のみ
# ルートコンテナとして MIMEMultipart オブジェクトを構築します
main_msg = email.MIMEMultipart.MIMEMultipart()
# 電子メール表示コンテンツとして MIMEText オブジェクトを構築し、ルートコンテナに添付します
text_msg = email.MIMEText.MIMEText("xxx forwardedあなたへのメール ",_charset="utf-8")
main_msg.attach(text_msg)
# 添付ファイルのコンテンツとして MIMEBase オブジェクトを構築し、ルート コンテナに添付します
ctype, encoding = mimetypes.guess_type(file_name)
ctype が None であるか、エンコーディングが None でない場合:
ctype='application/octet-stream'
maintype,subtype = ctype.split('/',1)
file_msg=email.MIMEImage.MIMEImage(open(file_name,'rb ').read() ,subtype)
## 添付ファイルヘッダーを設定します
basename = os.path.basename(file_name)
file_msg.add_header('Content-Disposition','attachment', filename = Basename)#メールヘッダーを変更します
main_msg.attach(file_msg)
# ルートコンテナのプロパティを設定します
main_msg['From'] = From
if ReplyToMail!='none':
main_msg['Reply-to'] = "%s" % ( Header(ReplyToName,"utf -8"),ReplyToMail)
#main_msg['To'] = To
main_msg['Subject'] = subject
main_msg['Date'] = email.Utils.formatdate()
#main_msg ['Bcc'] = To
# 書式設定された完全なテキストを取得します
fullText = main_msg.as_string()
# smtp を使用して電子メールを送信します
try:
Server.sendmail(From, To.split(';'), fullText)
最後に:
server .quit()
os.remove(file_name)
プレーンテキストを送信
text_msg = email.MIMEText.MIMEText( "xxxx によってあなたのために転送されたメール", _charset="utf-8")
main_msg.attach(text_msg)
or
内容=config.get("mail","content")
content=Header(content,"utf-8")#この文を追加するとメールは送信されません。実際、次の文の内容はエンコードされています。この文はもう必要ありません。
text_msg = email.MIMEText.MIMEText(content,_charset="utf-8")
main_msg.attach(text_msg)
したがって、漢字が含まれるトピックや返信には、Header("xxxx","utf -8) を使用してください。 ") エンコード変換のメソッド。コンテンツに関しては、Header("xxxx", "utf-8") を使用して繰り返し変換しないでください。変換するとエラーが発生します。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
