sendmail は使用できません。sakura 等、自分で借りているサーバーで動くはずです。また、このような URL を用意しておけば、Android 等のメール送信用の API としてテストに使う事ができます。❶ さくらインターネット、サーバコントロールパネル( 作成直後は、容量制限が 200M なので 2M 程度に変更しておきます ) ❷ Gmail の GUI( メールヘッダ等を確認するのに役立ちます )
❸ メーセージソースの一部
To: =?ISO-2022-JP?B?GyRCMDhAaBsoQg==?= <??????????@gmail.com> Subject: =?ISO-2022-JP?B?GyRCJWEhPCVrJE4lPyUkJUgbKEI=?= =?ISO-2022-JP?B?GyRCJWskSCRKJGokXiQ5GyhCKGxpZ2h0Ym94KQ==?= From: =?ISO-2022-JP?B?GyRCO2QbKEI=?= <phpuser@??????????.sakura.ne.jp> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit $BK\J8$r(B $BAw?.$7$^$9(B $B%+%J(B $B%+%J(B
▼ ここからが本題です PHP でメール処理をする場合、いろいろなキャラクタセットが入り組んで来るので注意が必要です。 ここではだいたいですが、このようになっています。 ❶ 入力 HTML : EUC-JP ❷ PHP のソース : UTF-8 ❸ PHP の内部エンコーディング : UTF-8 ❹ メール内 : iso-2022-jp( 但しヘッダ内はBASE64変換 ) ▼ mailtest.php
<? header( "Content-Type: text/html; Charset=utf-8" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); foreach( $_POST as $Key => $Value ) { $_POST[$Key] = str_replace("\\\\", "\\", $Value ); $_POST[$Key] = str_replace("\\'", "'", $_POST[$Key] ); $_POST[$Key] = str_replace("\\\"", "\"", $_POST[$Key] ); } // ************************************************************************ // unix では、sendmail を使用します。 // 通常、この URL から信頼されているメールアドレス前提にしているので、 // セキュリティ情報は送る事ができません // window 環境でもそれは同様なので、同一サーバーにメールサーバー // を用意するか、COM+basp21でセキュリティ情報を使って送信する必要があります // ************************************************************************ // mb_send_mail() は、e-mail をエンコードする際にこの設定を使用します // ※ subject と body のみ mb_language( "ja" ); mb_internal_encoding("utf-8"); // ********************************************************* // 使用するメールアドレス // ※ $from_address は、この PHP があるサーバが // ※ 管理しているメールサーバーのアドレスです // ※ gmail に送ると、ヘッダーのソースを簡単に確認できます // ********************************************************* $from_address = "phpuser@????????.sakura.ne.jp"; $to_address = "???????@gmail.com"; // ********************************************************* // 入力データが EUC-JP であると言う前提です // ※ $subj はこの内部で設定しているので UTF-8 です。 // ********************************************************* $subj = "メールのタイトルとなります(lightbox)"; $body = mb_convert_encoding( $_POST['text'], mb_internal_encoding(), "EUC-JP" ); // ********************************************************* // 「半角カタカナ」を「全角カタカナ」に変換します // ********************************************************* $body = mb_convert_kana($body,'K',mb_internal_encoding()); // ********************************************************* // 宛先と差出人は自分でエンコードする必要があります // ********************************************************* $to = mb_encode_mimeheader( mb_convert_encoding("宛先","iso-2022-jp", mb_internal_encoding()) ) . " <{$to_address}>"; // ********************************************************* // From: は追加ヘッダーとして設定しています // ********************************************************* $from = "From: " . mb_encode_mimeheader( mb_convert_encoding("私","iso-2022-jp", mb_internal_encoding()) ) . " <{$from_address}>"; $result = mb_send_mail($to, $subj, $body, $from ); if ( $result ) { $result = "成功"; } else { $result = "失敗"; } // ▼ この文字列は UTF-8 です ?> メール送信が終了しました。<?= $result ?>
▼ 送信テスト用の HTML
<!doctype html> <html lang="ja"> <head> <title>sendmail</title> <meta charset="euc-jp"> <style> body { margin: 0px; } textarea { width:400px; height:200px; } </style> </head> <body> <form method="post" action="mailtest.php"> <textarea name="text"></textarea> <br> <input type="submit" name="send" value="送信"> </form> </body> </html>
関連する記事 ( SQLの窓 ) ❶ Windows PHP(Pear)で、Gmail(SSL/465)を使ってメールを送る ❷ PEAR の Mail パッケージによるメール送信 ❸ IE 拡張メニューで取得したテキストをメールで送る 更新履歴 2009-05-06 : 初回投稿 2013-08-24 : WEB 経由の API として使う為に内容をチェック、整備
|
【PHP + 通信の最新記事】
- fake sendmail for windows を使って、PHP でごく普通に( mb_send_mail で )メール送信
- PHP の cURL でファイルアップロード
- PHP : WEB でもコマンドラインでも HTTP でファイルをダウンロードする 『fget.php』
- PHP : cURL : Google Photo API の albums.list メソッドを使用して アルバム一覧データを取得する
- PHP + cURL で Google Photo API の アクセストークンを取得する
- PHP : cURL で FTP + SSL ダウンロード
- PHP の imap 関数で( Windows ローカル )、Yahoo メールのメールをさくらインターネットのメールへコピーする
- PHP の imap 関数( Windows のローカル )で、さくらインターネットのメールボックスの情報を取得する
- PHP : IMAP 関数 でまずメールのヘッダ部分を整理してログに出力する / ※ JSON 出力を追加
- ファイルを一つアップロード : FORM の target を IFRAME にして、PHP に JavaScript を書き出させて元のページにメッセージを表示させる
- Pear の Net_POP3 で、SSL(995) を使って簡単にメール受信
- PHP をコマンドプロンプトから実行して、WEB 上のデータを取得するいくつかの方法
- FormData を使用して $.ajax で送信すると、ファイルのアップロードとメール送信(ファイル添付)を一度に行えます
- ファイルのアップロードからそれを添付してメールを送るテンプレート(スケルトン)
- PHP : mb_send_mail を使用した自家用メール送信 API
- PHP で Windows標準のオブジェクト(CDO.Message)とGMail を使ってメール送信
- PHP : http 経由でファイルのサイズを取得する file_size 関数と ファイルサイズを付加した get_imagesize 関数
- 連想配列のキー部分がプロパティと一致したらセットする( メール送信用クラス )
- PHP : リモートのファイルサイズを取得する
- ローカルの PHP を使ってコマンドプロンプトより簡単にバイナリファイルをアップロードする