PHPMailer を使用してインライン画像を取得するのに問題があります。次の行がない場合 (つまり、コメントアウトした場合)
リーリー ###良い結果。再度追加すると空のメールが届きます(Outlook と Gmail を試しました)。動作していることを確認するために「$success=」を追加しました。リーリー
これは画面出力です:
写真: ../images/Logo.jpg,ロゴ,ロゴ.jpg,,,インライン写真: ../podbanks/images/XX.jpg,XX,XX.jpg,,,inline
メール: オブジェクト(PHPMailer\PHPMailer\PHPMailer)#1 (71) { ["優先度"]=> NULL ["CharSet"]=> 文字列(10) "iso-8859-1" ["ContentType"]=> 文字列(9) "text/html" ["エンコーディング"]=> 文字列(4) "8ビット" ["エラー情報"]=> 文字列(0) "" ["送信者"]=> 文字列(18) "admin@example.com" ["送信者名"]=> 文字列(14) "管理者の例"["送信者"]=> string(18)"admin@example.com" ["件名"]=> string(27) "これがデフォルトのテーマです" ["本文"]=> string(215) "これはデフォルトのテキストを含む SendEmail からのテストです メッセージ本文に。画像もあります..." ["AltBody"]=> string(0) "" ["Ical"]=> 文字列(0) "" ["MIMEBody":protected]=> 文字列(0) "" ["MIMEHeader":protected]=> string(0) "" ["mailHeader":protected]=> string(0) "" ["WordWrap"]=> int(0) ["Mailer"]=> string(4) "smtp" ["Sendmail"]=> string(18) "/usr/sbin/sendmail" ["UseSendmailOptions"]=> bool(true) ["confirmReadingTo"]=> string(0) "" ["ホスト名"]=> 文字列(0) "" ["メッセージID"]=> 文字列(0) "" ["メッセージ日付"]=> 文字列(0) "" ["ホスト"]=> 文字列(14) "smtp.gmail.com" ["ポート"]=> int(587) ["Helo"]=> 文字列(0) "" ["SMTPSecure"]=> 文字列(3) "tls" ["SMTPAutoTLS"]=> bool(true) ["SMTPAuth"]=> bool(true) ["SMTPOptions"]=> 配列(0) { } ["ユーザー名"]=> 文字列(22) "examplemail@gmail.com" ["パスワード"]=> 文字列(16) "shotlzacfvdubehm" ["AuthType"]=> String(0) "" ["oauth":protected]=> NULL ["タイムアウト"]=> int(300) ["SMTPDebug"]=> int(0) ["Debugoutput"]=> string(4) "html" ["SMTPKeepAlive"]=> bool(false) ["SingleTo"]=> bool(false) ["SingleToArray":protected]=> array(0) { } ["do_verp"]=> bool(false) ["AllowEmpty"]=> bool(false) ["DKIM_selector"]=> string(0) "" ["DKIM_identity"]=>string(0) "" ["DKIM_passphrase"]=>string(0) "" ["DKIM_domain"]=> 文字列(0) "" ["DKIM_private"]=> 文字列(0) "" ["DKIM_private_string"]=> 文字列(0) "" ["アクション関数"]=> 文字列(0) "" ["XMailer"]=> String(0) "" ["smtp":protected]=> NULL ["to":protected]=> 配列(2) { [0]=> 配列(2) { [0]=> 文字列(19) "aa@gmail.com" 1=> 文字列(10) "AA" } 1=> 配列(2) { [0]=> 文字列(15) "aa@example.com" 1=> 文字列(13) "A/example" } } ["cc":protected]=> 配列(0) { } ["bcc":protected]=> 配列(0) { } ["ReplyTo":protected]=> 配列(1) { ["admin@example.com"]=> 配列(2) { [0]=> 文字列(18) "admin@example.com" 1=> 文字列(0) "" } } ["all_recipients":protected]=> array(2) { ["aa@gmail.com"]=> bool(true) ["ag@example.com"]=> bool(true) } ["受信者キュー":protected]=> 配列(0) { } ["ReplyToQueue":protected]=> array(0) { } ["attachment":protected]=> 配列(2) { [0]=> 配列(8) { [0]=> 文字列(31) "../images/clients/Logo.jpg" 1=> string(13) "Logo.jpg" 2=> 文字列(13) "ロゴ.jpg" [3]=>文字列(0) "" [4]=>文字列(10) "画像/jpeg" [5]=> bool(false) [6]=> 文字列(6) "インライン" [7]=> 文字列(9) "ロゴ" }1=> 配列(8) { [0]=> 文字列(35) "../images/XX.jpg" 1=> 文字列(16) "XX.jpg" 2=>文字列(16) "XX.jpg" [3]=>文字列(0) "" [4]=>文字列(10) "image/jpeg" [5]=> bool(false) [6]=> string(6) "inline" [7]=>; string(3) "XX" } } ["CustomHeader":protected]=> array(0) { } ["lastMessageID":protected]=> string(0) "" ["message_type":protected]=> string(0) "" ["boundary":protected]=> array(0) { } ["言語": protected]=> array(0) { } ["error_count":protected]=> int(0) ["sign_cert_file":protected]=> 文字列(0) "" ["sign_key_file":protected]=> 文字列(0) "" ["sign_extracerts_file": protected] => string(0) "" ["sign_key_pass": protected] = > string(0) "" ["例外": protected] = > bool(false) ["uniqueid":protected]=> string(0) "" } メッセージが送信されました。
包括的なドキュメントも見つかりませんでした。GitHub: 3731 でも見つかりませんでした。私が手に入れた中で一番近いのはこれでした。しかし、3 番目のパラメータが正確に何をしているのかはまだわかりません。名前を上書きしますか?なぜ?どのエンコーディングを使用すればよいですか (Base64 を試しましたが、両方とも空白のままにしました)? 「インライン」処理以外にどのようなオプションがありますか?等...###
P粉1649427912024-03-29 10:12:27
まず第一に、何年もライブラリに含まれていないファイル (オートローダー) を参照しているため、古いバージョンの PHPMailer を使用しているようです。更新してください。
あなたのコードは非常に古い例に基づいているようです。 Mailer
を自分で設定しないでください。isSMTP()
がこれを行います。
ディスク上のファイルに受信者に公開したくない別の名前が付いている場合は、その名前をオーバーライドする必要がある場合があります。たとえば、ローカルに logo-123456.png
があり、 logo.png
として追加します。
エンコードは base64
である必要があるため、デフォルトのままにしておきます。
MIME タイプはファイル拡張子と一致する必要があるため、これも無視できます (PHPMailer が自動的に設定します)。 拡張子と一致しない MIME タイプを設定する特別な理由がない限り、 > コンテンツと一致します。
$disposition
RFC2183。埋め込み画像にインライン以外のものを使用するのはあまり意味がないので、これもデフォルトのままにしておく必要があります。このオプションが存在するのは、RFC に存在する必要があると記載されているためです。
これらすべての結論として、実際に指定する必要があるのは、ファイルへのパスと cid
だけです。
SMTP ログを表示すると (SMTPDebug = 2
に設定)、メッセージに何が起こっているかが正確に表示されるため、役立つ場合があります。