ขอความช่วยเหลือ PHP ส่งเมลแนบไฟล์ด้วยครับ

เริ่มโดย m_manthai, 29 พฤษภาคม 2012, 21:05:27

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

m_manthai

ขอความช่วยเหลือ PHP ส่งเมลแนบไฟล์ด้วยครับ

โดยไฟล์ที่จะแนบไปคือไฟล์ที่ถูก เจเนอเรตหรือ exprot ขึ้นมาตอนนั้น ไฟล์จะเป็นนามสกุลอะไรก็ได้ เช่น .doc หรือ .rtf จะเป็น pdf ก็ได้แล้วแต่ท่านถนัด

ข้อมูลที่อยู่ในไฟล์ที่ถุกสร้างขึ้น จะเป็นข้อมูลที่อยู่ในตัวแปรครับผม


ในส่วนที่ผมจะทำสุดท้ายนั้นคือ มีช่องข้อความให้ผู้ใช้กรอกข้อมูลเข้ามา จากนั้น php จะนำค่านั้นไปใส่ในไฟล์ที่ที่ถูกสร้างขึ้นมาตอนนั้น แล้ว แนบไปในอีเมลส่งให้เวปมาสเตอร์เลยครับ


ท่านใดพอจะยกตัวอย่าง แต่ เจเนอร์เรตไฟล์ จากข้อมูลในตัวแปรเฉยๆก้ได้ครับ แล้วแนบไปกับเมล

ขอความกรุณาท่านผู้รู้ด้วยครับ ผมมึนมาหลายวันแล้ว


ขอบพระคุณครับ

m_manthai

สุดท้ายแล้วผมจะเอาไปประยถต์ทำแบบนี้ครับผม


m_manthai

อ้างถึงจาก: max30012540 ใน 30 พฤษภาคม 2012, 16:49:15
ไปหามาให้ครับ  :wanwan020: ==> http://www.thaicreate.com/php/php-send-email-attach-files.html

กราบขอบพระคุณมากเลยครับผม ที่ช่วยเหลือ  แม้ยังจะไม่ตรงเท่าไหร่ ที่ผมอยากได้ตัวอย่างหรือวิธีคือ สร้างไฟล์ตอนนั้นแล้ว attach ไปเลย

แต่ผมจะพยายามประยุกต์ดูครับผม

ขอบคุณครับ  +1 ให้แล้วนะครับผม

Sawat_D

การสร้างไฟล์ .txt ครับ

http://www.thaicreate.com/php/php-write-text-file.html

ลงดูครับน่าจะประยุกต์ใช้ได้ครับ
[direct=http://www.jkshoponline.com/]ขายส่งอาหารเสริม[/direct]
รับออกแบบเว็บไซต์ งานเสร็จค่อยจ่ายเงิน

Tcomputer

อ้างถึง<form action="<?php echo $PHP_SELF ?>" enctype="multipart/form-data" method="post">
อีเมล์แอดเดรสของผู้ส่ง : <input type="text" name="from"><br>
อีเมล์แอดเดรสของผู้รับ : <input type="text" name="to"><br>
หัวเรื่อง : <input type="text" name="subject"><br>
เนื้อความ : <textarea name="body" rows="3"></textarea><br>
ไฟล์ที่จะแนบ : <input type="file" name="attachment"><br>
<input type="submit" name="send" value="ส่งเมล์">
<input type="reset" value="clear">
</form><hr>
กรุณากรอกรายละเอียดให้ครบทุกช่องนะครับ เพราะโค้ดไม่ได้ดักข้อผิดพลาดไว้

<?php
//ถ้ามีการคลิกปุ่มส่งข้อมูล ให้ดำเนินการส่งเมล์
if ($send) {
  //สร้างเลขสุ่มขึ้นมา เพื่อใช้ในการกำหนดขอบเขตเนื้อหาของเมล์
  $boundary = uniqid("");

  //สร้างข้อมูลในส่วนเฮดเดอร์
  $header = "From: $from\n";
  $header .= "Content-type: multipart/mixed; boundary=\"$boundary\"";

  //กำหนดชนิดของไฟล์ที่แนบมากับอีเมล์
  if ($HTTP_POST_FILES['attachment']['type']) {
    $mimeType = $HTTP_POST_FILES['attachment']['type'];
  }
  else {
    $mimeType = "application/unknown";
  }

  //เก็บชื่อไฟล์ไว้ในตัวแปร $fileName
  $fileName = $HTTP_POST_FILES['attachment']['name'];

  $tmpName = $HTTP_POST_FILES['attachment']['tmp_name'];
  //เปิดไฟล์
  $fp = fopen($tmpName, "r");
 
  //อ่านเนื้อหาของไฟล์เข้ามาเก็บไว้ในตัวแปร $read
  $read = fread($fp, filesize($tmpName));
 
  /* เข้ารหัสไฟล์ที่จะแนบไป พร้อมทั้งปิดท้ายด้วยอักขระขึ้นบรรทัดใหม่ (\n) ซึ่งถือว่าสำคัญมาก มิฉะนั้นโปรแกรมอ่านเมล์จะไม่สามารถเปิดไฟล์ที่แนบไปกับเมล์ได้ */
  $read = base64_encode($read) . "\n";
 
  /* ใช้ฟังก์ชั่น chunk_split() ตัดเนื้อหาของไฟล์ที่เข้ารหัสแล้วออกเป็นหลายๆบรรทัด บรรทัดละไม่เกิน 76 ตัวอักษร (ตามข้อกำหนดของ RFC 2045) */
  $read = chunk_split($read);

  /* สร้างข้อมูลในส่วนเนื้อความ โดยใช้ตัวเลขที่ได้จากฟังก์ชั่น uinqid() เป็นตัวกำหนดขอบเขตของข้อมูล */
  $mbody = "--$boundary\n";
  $mbody .= "Content-type: text/plain; charset=windows-874;\n";
  $mbody .= "Content-transfer-encoding: 8bit\n\n";
  $mbody .= "$body\n";  //เนื้อความของเมล์

  $mbody .= "--$boundary\n";
  $mbody .= "Content-type: $mimeType; name=$fileName\n";
  $mbody .= "Content-disposition: attachment; filename=$fileName\n";
  $mbody .= "Content-transfer-encoding: base64\n\n";
  $mbody .= $read;  //เนื้อหาของไฟล์ที่แนบไปพร้อมกับเมล์
  $mbody .= "--$boundary--";

  //ส่งเมล์
  if (mail($to, $subject, $mbody, $header)) {
    echo "การส่งเมล์สำเร็จ ให้ลองเช็คเมล์ดู";
  }
  else {
    echo "ไม่สามารถส่งเมล์ได้ กรุณาตรวจสอบ";
  }
}
?>

ลองนำไปดัดแปลงเอานะครับผม พอดีผมเอามาจากหนังสือ PHP4 เห็นมีโค๊ตเกี่ยวกับแนบไฟล์ เผื่อพอช่วยได้

adidog

ผมว่าลองทำให้เป็น pdf แล้วค่อยแนบ เด๋วขอลองดูก่อน ถ้าเวิคจะมาบอกครับ :P :P :P
Certain Dri [direct=http://www.ishiclub.com/]Certain Dri[/direct]
คุณแม่มือใหม่ [direct=http://www.mamyget.com/]คุณแม่มือใหม่[/direct]

m_manthai

ขอบคุณทุกท่านครับ


อ้างถึงจาก: adidog ใน 31 พฤษภาคม 2012, 11:30:05
ผมว่าลองทำให้เป็น pdf แล้วค่อยแนบ เด๋วขอลองดูก่อน ถ้าเวิคจะมาบอกครับ :P :P :P


ขอบพระคุณมากเลยท่านครับ จะไม่ลืมพระคุณเลยครับ ถ้ามีโอกาสจะตอบแทนคุณ :-[

adidog

ลองแล้ว เวิคดีครับ

http://27.254.38.80/~fatsions/tcpdf/

ผมใช้ tcpdf ในการ gen pdf น่ะครับ หาโฟลดเอาใน google

ส่วนเมล์ก็หาพวก phpmailer ก็ได้ครับใช้งานง่ายดีครับ

***เพิ่มเติมโฟลเดอร์ data/ ที่ใช้เก็บไฟล์ต้อง chmod777 ด้วยน่ะครับ เด๋วมันเขียนไฟล์ลงไม่ได้

อันนี้โค้ดตัวอย่างผมครับเขียนสด 555 มั่วได้อีก ไม่เข้าใจตรงไหนลองถามมาถ้าตอบได้ก็จะตอบ ตอบไม่ได้ก็ ตัวใครตัวมันครับ  :o :o :o แต่ผมลองแล้ว ใช้ได้ครับ


<?php
$flag 
false;
if(
$_POST){
require_once(
'mail.php');
require_once(
'config/lang/eng.php');
require_once(
'tcpdf.php');

// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATIONPDF_UNITPDF_PAGE_FORMATtrue'UTF-8'false);
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Nicola Asuni');
$pdf->SetTitle('TCPDF Example 001');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');
$pdf->SetHeaderData(PDF_HEADER_LOGOPDF_HEADER_LOGO_WIDTHPDF_HEADER_TITLE.' 001'PDF_HEADER_STRING);
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN''PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA''PDF_FONT_SIZE_DATA));
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFTPDF_MARGIN_TOPPDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

//set auto page breaks
$pdf->SetAutoPageBreak(TRUEPDF_MARGIN_BOTTOM);
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$pdf->setLanguageArray($l);
$pdf->setFontSubsetting(true);
$pdf->SetFont('freeserif'''14);//include this for support utf-8 language
$pdf->AddPage();

$html '<h1> Hi :'.$_POST['email'].'</h1>';
$html .= '<p>';
$html .='Your Description :'.$_POST['enquiry'];
$html .='</p>';

$pdf->writeHTMLCell($w=0$h=0$x=''$y=''$html$border=0$ln=1$fill=0$reseth=true$align=''$autopadding=true);

$filename 'data/file_'.md5(mt_rand()).'.pdf';//เก็บไฟล์ลงในโฟลเดอร์ data

$pdf->Output($filename'F');

$subject 'Message form'.$_POST['email'];

$mail = new Mail(); 
$mail->protocol 'mail';
$mail->setTo($_POST['email']);
$mail->setFrom($_POST['email']);
$mail->setSender('NoobMan');
$mail->setSubject(html_entity_decode($subjectENT_QUOTES'UTF-8'));
$mail->setHtml($html);
$mail->setText(html_entity_decode($textENT_QUOTES'UTF-8'));
$mail->addAttachment($filename);
$mail->send();
$flag true;
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
 <TITLE> New Document </TITLE>
 <META NAME="Generator" CONTENT="EditPlus">
 <META NAME="Author" CONTENT="">
 <META NAME="Keywords" CONTENT="">
 <META NAME="Description" CONTENT="">
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</HEAD>

<BODY>
<?php if($flag){?>
<h1>ส่งข้อความแล้ว</h1>
<p><a href="<?php echo $filename?>">Download file ที่นี่</a></p>
<?php ?>
<form name="sendmail" action="index.php" method="post">
<table>
<tr>
<td>
Your mail:</td><td><input type="text" name="email" size="30" /></td>
</tr>
<tr>
<td>
Your Description:</td><td><textarea name="enquiry" cols="50" rows="10"></textarea></td>
<tr>
<td>
<input type="submit" value="Send" /></td><td></td>
</table>

</form>
 
</BODY>
</HTML>

Certain Dri [direct=http://www.ishiclub.com/]Certain Dri[/direct]
คุณแม่มือใหม่ [direct=http://www.mamyget.com/]คุณแม่มือใหม่[/direct]

vanavat

แจ่มมากครับผมลองแล้วเยี่มเลยแต่ว่ามันส่งเมลมา4รอบอะครับ
[direct=http://www.sesonshopping.com]รองเท้าผ้าใบผู้หญิง [/direct][direct=http://www.9manup.com]เสื้อแฟชั่นผู้ชาย[/direct][direct=http://www.sesonshopping.com]รองเท้าเกาหลี[/direct][direct=http://www.sesonshopping.com]รองเท้าผ้าใบผู้หญิง[/direct]

adidog

อ้างถึงจาก: vanavat ใน 31 พฤษภาคม 2012, 13:45:15
แจ่มมากครับผมลองแล้วเยี่มเลยแต่ว่ามันส่งเมลมา4รอบอะครับ

แก้ไขแล้วครับ ตะกี้ ลองให้มันเด่งโหลดไฟล์อัตโนมัติ แต่ไม่เวิค มันติดลูป เลยต้องทำเป็นลิงค์ให้โหลดไฟล์เอาครับ  :wanwan020: :wanwan020: :wanwan020:
Certain Dri [direct=http://www.ishiclub.com/]Certain Dri[/direct]
คุณแม่มือใหม่ [direct=http://www.mamyget.com/]คุณแม่มือใหม่[/direct]

adidog

ใครถูกใจก็ + ให้ด้วยน่ะครับ(ไม่รู้จะเอาไปทำไม 555)  :wanwan004: :wanwan004: :wanwan004:
Certain Dri [direct=http://www.ishiclub.com/]Certain Dri[/direct]
คุณแม่มือใหม่ [direct=http://www.mamyget.com/]คุณแม่มือใหม่[/direct]

vanavat

+1 ให้แล้วแต่ก็ยังคิดไม่ออกว่าจะเอาไปทำอะไร  แต่ตอนนี้ อยากได้ formmail ยืนยันการชำระเงินแบบนี้แนบไฟล์ สลิป มีเลือกธนาคาร ทำออกมาเละๆไม่ค่อยเลยมันไม่สวยอะ
[direct=http://www.sesonshopping.com]รองเท้าผ้าใบผู้หญิง [/direct][direct=http://www.9manup.com]เสื้อแฟชั่นผู้ชาย[/direct][direct=http://www.sesonshopping.com]รองเท้าเกาหลี[/direct][direct=http://www.sesonshopping.com]รองเท้าผ้าใบผู้หญิง[/direct]

m_manthai

ขอบพระคุณมากครับ บวกหนึ่งให้แล้ว เดี๋ยวขอเอาไปลองก่อน แล้วถ้ามีปัญหาคงมารบกวนท่านอีกรอบ  :-[  แต่ก็พยายามช่วยตัวเองครับ