2

まず、Pear の Mail_mime を使用して試してみましたが、共有ホスト プロバイダーと cpanel からクラスをロードできません。

次に、この投稿の指示に従い ました。画像を「一時」フォルダーに書き込みますが、ゼロバイトを書き込みます。明らかに問題は、何が欠けているかということです。エンコードされた文字列の + 記号を変換することについてどこかで読みましたが、わかりませんか?

主な問題は、キャンバス画像をメールで送信する方法です。それについての完全な知識はありません。私はいくつかの投稿をたどりましたが、サーバー側で一時的な画像ファイルを作成して、組み込みのメール機能を使用してメールに添付できるようにする必要があると考えました。実際には 0 バイトが書き込まれたため、最初にその問題を解決するのが論理的であり、メールの問題は自然に解決します。以下のコメントから、最初にイメージを作成する必要はないようですが、実行可能な解決策を得る前に、さらに調査する必要があります..

また、添付ファイルではなく、メールの本文で画像を送信するための別のソリューションまたはphpクラスを誰かが持っている場合

これをajaxで送信します

var canvas = document.getElementById('doodle');
function serialize(canvas) {
    return canvas.toDataURL();
}

これはサーバーサイドです

case 'doodle':
    $image = $_POST['doodle'];
    $data ="doedeliedoe";

    $email ="from@msn.com";
    $headers="From:".$email."\r\n";
    $headers .= "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
    list($settings, $encoded_string) = explode(',', $image);
    list($img_type, $encoding_method) = explode(';', substr($settings, 5));

    if($encoding_method == 'base64'){

        $file=fopen("/home/user/public_html/user/temp/newLego.png",'w+');

       fwrite($file,base64_decode($encoded_string)) ;
       fclose($file);
    }
    $my_file = "newLego.png";
    $my_path = "/home/user/public_html/user/temp/";
    $my_subject = "My Design";
    $my_message = "Designed by ".$email;
   $this-> mail_attachment($my_file, $my_path, "mymail@gmail.com", $email, $email, $email,  $my_subject, $my_message);  



function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {
    $file = $path.$filename;
    $file_size = filesize($file);
    $handle = fopen($file, "r");
    $content = fread($handle, $file_size);
    fclose($handle);
    $content = chunk_split(base64_encode($content));
    $uid = md5(uniqid(time()));
    $name = basename($file);
    $header = "From: ".$from_name." <".$from_mail.">\r\n";
    $header .= "Reply-To: ".$replyto."\r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
    $header .= "This is a multi-part message in MIME format.\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
    $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $header .= $message."\r\n\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here
    $header .= "Content-Transfer-Encoding: base64\r\n";
    $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    $header .= $content."\r\n\r\n";
    $header .= "--".$uid."--";
    if (mail($mailto, $subject, "", $header)) {
        //echo "mail send ... OK"; // or use booleans here
    } else {
       // echo "mail send ... ERROR!";
    }
}   

ありがとう、リチャード

4

1 に答える 1

3

まず第一に、直面している問題に慣れる必要があります。次のいずれかですか。

  1. キャンバスを画像「ファイル」に変換する   - または -
  2. 送信メールメッセージに画像「ファイル」を添付する

シナリオで 1. を実行せずに 2. を実行することはできませんが、2. は 1. とは別に解決できます。

どちらか一方に質問することをお勧めします。両方を統合することは、実際には非常に簡単です。

  • 添付ファイルのみを受け入れるメール ライブラリがある場合は、一時ファイルを作成する必要があります。SplTempFileObjectPHP で非常に簡単に一時ファイルを作成できます。
  • 添付ファイルとしてバイナリ文字列を受け入れるメール ライブラリがある場合は、バイナリ文字列をそのまま渡すことができます。
  • キャンバス ビットマップ データからのファイルの作成が機能したかどうかをデバッグする必要がある場合は、ファイルに保存し、そのファイルが画像かどうかをテストする必要があります (これは手動で行うのが最も簡単ですが、自動化することもできます)

この回答がコメントに似ている場合は申し訳ありませんが、質問が非常にセグメント化されているため、実際にコードを提供することにあまり役に立たないというだけです。

于 2012-09-29T09:37:35.523 に答える