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<%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") を使用して繰り返し変換しないでください。変換するとエラーが発生します。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

VSコード拡張機能は、悪意のあるコードの隠れ、脆弱性の活用、合法的な拡張機能としての自慰行為など、悪意のあるリスクを引き起こします。悪意のある拡張機能を識別する方法には、パブリッシャーのチェック、コメントの読み取り、コードのチェック、およびインストールに注意してください。セキュリティ対策には、セキュリティ認識、良好な習慣、定期的な更新、ウイルス対策ソフトウェアも含まれます。

VSコードはWindows 8で実行できますが、エクスペリエンスは大きくない場合があります。まず、システムが最新のパッチに更新されていることを確認してから、システムアーキテクチャに一致するVSコードインストールパッケージをダウンロードして、プロンプトとしてインストールします。インストール後、一部の拡張機能はWindows 8と互換性があり、代替拡張機能を探すか、仮想マシンで新しいWindowsシステムを使用する必要があることに注意してください。必要な拡張機能をインストールして、適切に動作するかどうかを確認します。 Windows 8ではVSコードは実行可能ですが、開発エクスペリエンスとセキュリティを向上させるために、新しいWindowsシステムにアップグレードすることをお勧めします。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

VSコードでは、次の手順を通じて端末でプログラムを実行できます。コードを準備し、統合端子を開き、コードディレクトリが端末作業ディレクトリと一致していることを確認します。プログラミング言語(pythonのpython your_file_name.pyなど)に従って実行コマンドを選択して、それが正常に実行されるかどうかを確認し、エラーを解決します。デバッガーを使用して、デバッグ効率を向上させます。
