2012-09-29 54 views
1

首先,我try'd與Mail_mime梨做派HTML5畫布圖像,但我無法從我的共享主機提供商和的cPanel加載類。如何使用電子郵件

接下來我遵循this post 的指示。它將圖像寫入「temp」文件夾,但它寫入零字節。 顯然問題是,我錯過了什麼。 某處我閱讀了有關在編碼字符串中轉換+符號的消息,但我不確定?

的主要問題是如何發送電子郵件與畫布圖像,我沒有換去有關完整的知識。我跟着一些帖子,我認爲我需要在服務器端創建一個臨時映像文件,以便能夠將它附加到具有郵件功能的電子郵件中。由於實際寫入0字節,所以首先解決該問題似乎是合理的,並且郵件問題將自行解決。 從下面的評論,似乎創造一個形象首先是不neccesary,但我要調查一些之前我有一個可行的解決方案..

此外,如果任何人有另一種解決方案或者PHP類發送圖像郵件 的身體,而不是一個附件

我用Ajax發送此

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

這是服務器端

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

    $email ="[email protected]"; 
    $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, "[email protected]", $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!"; 
    } 
} 

謝謝,理查德

+0

圖像已經base64編碼,爲什麼解碼到文件只是爲了讀取和編碼後? –

+0

我不知道,我只是跟着他人的帖子,你可能是對的,但它仍然留給我爲什麼有0字節寫入.. – Richard

回答

2

你首先應該更好地讓自己適應你面對的問題。難道之一:

  1. 轉換一個畫布圖像「文件」   - 或 -
  2. 將一個圖像「文件」到傳出郵件

您將無法做在方案2,沒有做1,但是2可以獨立解決的1 ..

我建議你要麼問一個或另一個。整合兩者實際上是相當直接的:

  • 如果你有一個只接受附件文件的郵件庫,你需要創建一個臨時文件。你可以很容易地用PHP創建臨時文件,其格式爲SplTempFileObject
  • 如果您有一個郵件庫接受附件的二進制字符串,您可以傳遞二進制字符串。
  • 如果您需要調試是否創建一個文件出來畫布位圖數據所做的工作,你應該保存到一個文件和測試,如果該文件是一個圖像(這是最容易手工完成,但是這自動化,太)

很抱歉,如果這個答案更像是一個評論,它只是我不覺得在實際提供代碼的問題是,許多分段多大用處。

+0

我不完全理解你在說什麼,我一直在尋找職位在這裏,顯然你想知道更多關於這個問題。什麼郵件庫,除了標準郵件..我不知道?就像我說過的,我嘗試過梨。你說我需要一個或另一個..不知道爲什麼......我想我已經閱讀了關於郵寄畫布圖像的所有帖子,但沒有出現..如果這似乎對你很明顯..然後請指出我更多..因爲我找不到任何有用的職位.. – Richard

+0

你不inmediatly必須給代碼,但更多的幫助,將不勝感激..我一直在這一天已經......但這不是真的一個問題,我的主要問題是在帖子的主題。我做錯了什麼是其他人檢查 – Richard

+1

一個郵件庫支持附件通過文件系統以及通過內存(字符串)是[Phpmailer](http://code.google.com/a/apache-extras.org/p/phpmailer/),如果您不使用任何軟件包管理器,則集成相當容易。否則,另一個非常好的是Swiftmailer。 – hakre

相關問題