PHPから携帯へメール送信

このQ&Aのポイント
  • PHPから携帯電話へ絵文字付きでメールを送信する方法について教えてください。
  • 現在、base64_encodeを使用して絵文字の表示まではできていますが、本文が途中で途切れてしまいます。
  • 質問者はmb_convert_encodingやpreg_replaceを使用しているため、それらの部分に問題はないと考えていますが、どうすれば本文の途中の切れる問題を解決できるでしょうか。
回答を見る
  • ベストアンサー

PHPから携帯へメール送信

いつもお世話になっております。 PHPから携帯電話へ"絵文字付き"でメールを送るプログラムを作成している のですが、『base64_encode』等を使用して絵文字の表示までは行う事がで きました。 ですが、本文が途中で途切れてしまうのです・・・。 PHP側は、 $to = mb_convert_encoding(mb_decode_mimeheader($structure->headers['from']), 'SJIS', 'ISO-2022-JP'); $subject = mb_convert_encoding(mb_decode_mimeheader($structure->headers['subject']), 'SJIS', 'ISO-2022-JP'); (省略)  ・  ・ $body = $structure->body; $body = preg_replace('/\s*>\s.*/', '', $body); $body = mb_convert_encoding($body, 'SJIS', 'ISO-2022-JP'); //---------------------------------- // base64_encode //---------------------------------- $subject = "=?shift_jis?B?" . base64_encode($subject) . "?="; $body = base64_encode($body); //---------------------------------- // ヘッダを作成 //---------------------------------- $headers = "From: test@mail.com\n"; $headers .= "MIME-Version: 1.0\n"; $headers .= "Content-Type: text/plain; charset=Shift-JIS\n"; $headers .= "Content-Transfer-Encoding: base64"; //---------------------------------- // メール送信 //---------------------------------- $res = mail($to, $subject, $body, $headers);  ・  ・ (省略) 上記のように記述しています。 メールは送れます。絵文字も表示されます。ですが、本文が途中で途切れ てしまいます。 どなたかご教授をお願い致します。

  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

> 本文が途中で途切れてしまいます。 この現象が起きるのは、受信側の携帯電話でのことですか? 途中というのは、本文の何文字目のことですか? どの通信事業者の携帯(機種がからむのかもしれません)に送ったときに、 本文が何文字以内ならOKだがそれを超えるとNGになる、 というような、具体的な情報はありませんか? こういった情報を集めることで、問題の切り分けができます。

haru_777
質問者

補足

ご回答ありがとうございます。 この現象が起きているのは携帯電話の方です。 いつも770文字目の所で切れてしまいます。 今のところAUのみでテストしているのですが、 必ず770文字目で文字が切れてしまいます。 現在、他のキャリアでも試しています。

関連するQ&A

  • メールのFromに半角ピリオドが入るとエラーが・・・

    PEARのメール送信について教えてください。 現在PEARのMailと、mime.phpを使用してメール送信をするプログラムを組んでいるのですが、エンコードの仕方が悪いのかメールのFromに半角ピリオド、半角カンマなどが入るとエラーが出てしまいます。 以下がそのコードの主要部分ですが、対応策がありましたらご教授ください。よろしくお願いいたします。 --------------------------------------------------------- //ヘッダーのFromエンコード(問題の部分?) $headers['From'] = mb_encode_mimeheader(mb_convert_encoding( $mail_from_name , "ISO-2022-JP", "EUC-JP"))."<".$mail_from.">"; $objMail =& Mail::factory('sendmail'); $original = mb_internal_encoding(); $headers['Subject'] = mb_convert_encoding( $sbj , "ISO-2022-JP" , "EUC-JP" ); mb_internal_encoding("ISO-2022-JP"); $headers['Subject'] = mb_encode_mimeheader($headers['Subject'],"ISO-2022-JP"); mb_internal_encoding($original); $crlf = "\n"; $mime =& new Mail_mime($crlf); $mime->setHTMLBody($body); $build_param = array( "html_charset" => "EUC-JP", "text_charset" => "ISO-2022-JP", "head_charset" => "ISO-2022-JP", ); $body = $mime->get( $build_param ); $headers = $mime->headers($headers); $objMail =& Mail::factory('sendmail'); $result = $objMail->send( $mail_to , $headers , $body );

    • 締切済み
    • PHP
  • Gmailへのメール送信で文字化け

    PHPでフォームメールの作っているのですが、Gmailで送信したメールを受け取ると□□□□□というように文字化けが起こっていまいます。 アウトルック、ホットメールなどは大丈夫なのですが、グーグルのGmailだけ駄目なようです。なぜ文字化けするのでしょうか? mb_language("Ja"); $header = "From: reminder@aaa.com\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: text/plain;charset=ISO-2022-JP\r\n"; $header .= "Content-Transfer-Encoding: base64"; $to = "aaa@gmail.com"; $subject = "送信テスト"; $body = "本文テスト本文テスト"; $subject = base64_encode($subject); $subject = mb_convert_encoding($subject,"ISO-2022-JP"); $subject = "=?ISO-2022-JP?B?" . $subject . "=?="; $body = base64_encode($body); $body = mb_convert_encoding($body,"ISO-2022-JP"); $success = @mail($to,$subject,$body,$header); if($success) print "成功"; else print "失敗";

    • ベストアンサー
    • PHP
  • 中国語(GB2312)のメール送信方法

    下記の方法でEmailを送信しようとしているのですが、中国語の文字が「?」または激しく文字化けしてしまいます。 送信元のファイルはUTF-8です。 mb_internal_encoding("GB2312"); $to = "to@test.com"; $from_name = mb_convert_encoding("中国語名","GB2312","AUTO"); $from_name = mb_encode_mimeheader("中国語名","GB2312","B"); $subject = mb_convert_encoding("中国語題名","GB2312","AUTO"); $subject = mb_encode_mimeheader("中国語題名","GB2312","B"); $headers.="Content-type: text/plain; charset=GB2312\r\n"; $headers.="Content-Transfer-Encoding:8bit\r\n"; $headers.="From: ".$from_name."<from@test.com>\r\n"; $headers.="Reply-To: ".$from_name."<from@test.com>"; $body = mb_convert_encoding("中国語本文","GB2312","AUTO"); mail($to,$subject,$body,$headers); 上記方法で日本語メールを送信した場合、GB2312をISO-2022-jpに変更しただけで文字化けもなく送信できました。 中国語の場合は何か特別な処置が必要なのでしょうか。 どなたかご存知の方教えてください。

    • 締切済み
    • PHP
  • PHPでフォームメール

    いつも適切なご回答誠にありがとうございます。PHP初心者で参考書やnetを頼りに制作している者です。現在フォームを作成していて確認メールでの質問です。送信者宛てには上手く送信されるのですが、管理者宛のメールの件名と送信者がうまく表示されません。どなたかお助けください。 //----------------ここから管理者宛にMAIL送信------------------------// $subject="資料請求がございました"; $subject=mb_convert_encoding("$subject","JIS","SJIS"); $subject=mb_encode_mimeheader($subject); $other = stripslashes($other); $from="${name01}"; $from=mb_convert_encoding("${from}","JIS","SJIS"); $from = base64_encode($from); $from = "=?ISO-2022-JP?B?" . $from . "?="; $from = "From: \"".$from. "\"" . "<" . "$e_mail" . ">"; $s_msg="以下の内容で資料請求がありました。資料発送の手配をお願いします。\n _/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄\n ■お名前:${name01} ■電話番号:${tel} ■E-メール:${e_mail} ■ご意見・ご要望:\n\n${other}\n _/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄\n ${d_site}|資料請求フォーム\n \n"; $s_msg = mb_convert_encoding($s_msg,"JIS","SJIS"); $sendto = "$d_recipient"; mb_send_mail($sendto,"$subject","$s_msg","$from"); //-------------------------------------------------------------------------------------//

    • ベストアンサー
    • PHP
  • 自作メールフォームから送信するとメール内容がおかしくなる。

    ※PHP初心者なので、お手柔らかにお願いします。 自作メールフォームからメール送信すると、メールは送れるのですがメールの内容がおかしくなります。 現状は、件名のみ正しく表示され、差出人と本文の内容が空になります。 いろいろなサイトを見て試してみたのですが、どれも同じ結果で何が間違っているのかよくわからず困ってます。 メールの設定として下記を、 mb_language("Japanese"); mb_internal_encoding ("SJIS"); mb_detect_order("ASCII, JIS, UTF-8, EUC-JP, SJIS"); $MailTo = "送付先メールアドレス"; メール送信事態は下記ソースの通りです。 // エンコードして文字列を作成 $Name = mb_convert_encoding($Name, 'JIS', 'auto'); $Header = "From:" .mb_encode_mimeheader($Name). "<" .$Mail. ">\n"; $Subject = "=?iso-2022-jp?B?".base64_encode(mb_convert_encoding("お問い合わせ", 'JIS', 'auto')). "?="; $Message = mb_convert_encoding($Message, "JIS", "auto"); // メール送信処理 $Ret = mb_send_mail($MailTo, $Subject, $Message, $Header);

    • ベストアンサー
    • PHP
  • mail()でメール送信で、特定のメーラーの受信のみ件名が文字化け

    PHPでメール配信プログラムを作っております。 配信テストを行なったのですが、特定のメーラーで件名が文字化けしてしまう現象に見舞われしてしまい、対処法を探しております。 ■テストメーラー 1、OutlookExpress 2、EdMax 3、Thunderbird ■ソース(一部抜粋) mb_language('Japanese'); mb_internal_encoding("SJIS"); //1 $subject = mb_encode_mimeheader($subject); //2 $subject = mb_convert_encoding($subject,"JIS","SJIS"); $send_body = mb_convert_encoding($send_body,"JIS","SJIS"); $header = "From: $fronmail.\n"; $header .= "Return-path: $return\n"; $header .= "Reply-To: $fronmail.\n"; //3 $header .= "Subject: $subject\n"; $header .= "Message-ID: {$MessageID}\n"; $header .= "MIME-Version: 1.0\n"; $header .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; $header .= "Content-Transfer-Encoding: 7bit\n"; //4 $header .= "Content-Transfer-Encoding: base64\n"; $header .= "X-Mailer:PHP/".phpversion(); $chk_mail = mail($to_email,$subject,$send_body,$header); ■設定値 $body = $subject = "日本語テスト"; メールアドレスはプロバイダなどが発行しているもの ■現象 ソースのままだと1、2は件名は文字化けせず、3は文字化け(???{????? ※?はひし形に囲まれた?です)します。 それぞれコメントアウトを外したり切り替えたりするのですが、1、2も件名が文字化けになったりします。 3は基本的にどのコメントアウトを有効にしても文字化けのままです。 $subjectに関しては、mail関数のものが優先のようでして、試しに空にしてみたのですが、件名も空のままでした。 何故この形式を取っているかというと、半角カナを使いたいが為でして、mb_send_mailだと半角カナが使えなかったような気がしてmailを使っております。 あと、popenで直接コマンドを打つという手もありそうですが、sendmailではなくpostfixなのですがpostfixでコマンドをという手段を探した方が良いのでしょうか? 出来ればmailを使って文字化けもしない方向を希望なのですが、それが駄目なら他の手段など誘導していただければ幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • phpで文字変換がうまくできません。

    メールデータでSubjectを変換したいのですが文字バケしてしまいます。 あるサイトを参考に変換してみたのですがうまくいきません。 どなたか教えて下さい、よろしくお願いします。 $Subject="=?iso-2022-jp?B?YWJjGyRCJUYlOSVIIzEjMBsoQg==?="; $Subject= mb_decode_mimeheader( $Subject); $Subject= mb_convert_encoding( $Subject, "EUC-JP" ); echo $Subject; 結果:abc?????(←正しい結果は「abcテスト10」)

    • ベストアンサー
    • PHP
  • Mail_mimeDecodeでメール本文取得

    index.php <form action="mailto:info@hoge.com" method="get" id="join"> <input type="hidden" name="body" value="<?php echo $friend;?>" /> </center></form> empty_mail.php $params['include_bodies'] = true; $params['decode_bodies'] = true; $params['decode_headers'] = true; $params['input'] = file_get_contents("php://stdin"); $params['crlf'] = "\r\n"; $mail_data = Mail_mimeDecode::decode($params); $MailBody = getbody($mail_data); if (!$MailBody) { print "cannot get MailBody"; // エラー処理 }// $MailBodyを使った処理 function getbody($arg) { if ($arg->ctype_primary == 'multipart') { foreach($arg->parts as $parts) { $ret = getbody($parts); if ($ret) { return $ret; } } } if ($arg->ctype_primary == 'text') { if ($arg->ctype_secondary == 'plain') { if (strtolower($arg->ctype_parameters['charset']) == 'iso-2022-jp') { return mb_convert_encoding($arg->body, "UTF-8", 'JIS'); } else { return $arg->body; } } } return false; } //メールを解析する $decoder = new Mail_mimeDecode($source); $structure = $decoder->decode($params); //送信元を取得する $mail = $structure->headers['from']; $mail = addslashes($mail); $mail = str_replace('"','',$mail); $from = $structure -> headers['from']; $from = mb_decode_mimeheader($from); $from = mb_convert_encoding($from, mb_internal_encoding(),'auto'); if(preg_match( '/<(.*?)>$/' , $from , $match)){ $from = $match[1]; } $from = trim($from); $from = strtolower($from); //送信データを設定する $recipients = $from; $new_from = 'info@hoge.com'; mb_language('ja'); mb_internal_encoding('sjis'); $subject = mb_encode_mimeheader(mb_convert_encoding("登録URL", "JIS", "auto"), "JIS"); $body = "下記のURLをクリックして登録を行ってください http://hoge/hoge.php?". $MailBody . "". session_name()."=". htmlspecialchars(session_id()); と$friendを登録フォーム画面にいくまで情報を維持したいのですが、ご教授お願いします。

    • ベストアンサー
    • PHP
  • Net_POP3 メール一覧のソート

    Net_POP3を使用してメールの閲覧を作成しています。 現在は日付の古いものから新しいものへと表示されています。 これを日付の新しいものから古いものへと表示をさせたいのですが、sortがうまくできず困っています。 ご存知の方がいらっしゃいましたらご教示お願いします。 ソースは下記になります。 $count = $pop3->numMsg(); if ($count) { $count = $pop3->getListing(); $start = 1; $end = 21; if ($count !== false) { foreach ($count as $key => $value) { if($start < $end) { $overview = $pop3->getParsedHeaders($start); $body = $pop3->getBody($start); $from = mb_decode_mimeheader($overview['From']); $from = mb_convert_encoding($from, "UTF-8", "JIS"); $subject = mb_decode_mimeheader($overview['Subject']); $subject = mb_convert_encoding($subject, "UTF-8", "ISO-2022-JP"); $subject = mb_strimwidth($subject, 0, 42, "...",'UTF8'); $date = mb_decode_mimeheader($overview['Date']); $body = nl2br($body); $maillist .= '<tr>'."\n"; $maillist .= '<td>'.$subject.'</td>'."\n"; $maillist .= '<td>' .$from. '</td>'."\n"; $maillist .= '<td>' .date('Y/m/d H:i:s',strtotime($date)). '</td>'."\n"; $maillist .= '</tr>'."\n"; $start++; } } } } 宜しくお願いします。

    • 締切済み
    • PHP
  • SMTP接続でのPEARメール送信の差出人がsoftbankのみ表示さ

    SMTP接続でのPEARメール送信の差出人がsoftbankのみ表示されなくて困っております。 require_once("Mail.php"); require_once("Mail/mimeDecode.php"); mb_internal_encoding('UTF-8'); mb_language("ja"); $params = array( "host" => "***", "port" => 587, "auth" => true, "username" => "***", "password" => "***" ); $mailObject = Mail::factory("smtp", $params); $internal = 'utf-8'; $input = 'utf-8'; $target = 'ISO-2022-JP'; $recipients = "hoge@hoge.com"; $from_name = "日本語"; $from_name = mb_convert_encoding($from_name,$input,mb_detect_encoding($from_name)); $subject = "テスト"; $subject = mb_convert_encoding($subject,$input,mb_detect_encoding($subject)); $headers = array( "To" => $from, "From" => mb_encode_mimeheader($from_name,$target)."<***>", "Subject" => mb_encode_mimeheader($subject,$target), "Return-Path" => mb_encode_mimeheader($subject,$target)."<***>", ); $body = "テスト"; $body = mb_convert_encoding($body,$target,mb_detect_encoding($body)); $mailObject -> send($recipients, $headers, $body); なかなか説明が難しいので、手っ取り早くコードを書き出しましたが、 このphpファイルを使ってメールを送信しますと、 PCメール、WEBメール(hotmail)、携帯メール(DOCOMO,AU,SOFTBANK) 全て文字化けなく送信出来ている状況です。 上記のうち、差出人が受信側で表示されるのはDOCOMO以外全てだと思うのですが、 (もちろん携帯は機種によっては例外的に表示されないのもあるかと) 他のPCメールからは日本語の差出人が確認できるSOFTBANK機種でメールを 受信しますと、(差出人が設定されていない場合と同じ)メールアドレスのみが 表示されてしまう状態です。 前述のphpファイルは、SOFTBANK以外の差出人設定可能なPC,WEB,AUは 全て差出人の設定が確認できております。その問題のSOFTBANKも、差出人が 設定されないだけで、件名本文ともに文字化けせず、正常に受信が出来ています。 ネットで色々と探してみましたが、同様の状況が確認できず、 どなたかお力添えいただけましたら幸いかと思い、質問した次第です。 どうかよろしくお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう