ใช้ฟังก์ชั่นเมลล์และส่งไฟล์แนบไปด้วย ทำอย่างไรครับ

สำหรับผู้ที่ เริ่มต้น Programming - PHP มีอะไร แนะนำ หรือข้อสงสัยต้องบอร์ด นี้ คนที่มีความรู้ แบ่งปันคนอื่นบ้างนะ ปัญหาการเขียนโปรแกรม แบบ OOP Session Cookies php network

Moderators: mindphp, ผู้ดูแลกระดาน

User avatar
tissana
PHP Sr. Member
PHP Sr. Member
Posts: 84
Joined: 01/01/1970 7:00 am
Contact:

ใช้ฟังก์ชั่นเมลล์และส่งไฟล์แนบไปด้วย ทำอย่างไรครับ

Post by tissana »

คือผมใช้ฟังก์ชั่นเพื่อส่งข้อความจากหน้าเว็บเพื่อเข้าไปในเมลล์ จะทำได้ปรกติ แต่ทีนี้หากผมต้องการให้มีการแนบไฟล์ 2 ไฟล์ หรือมากกว่า เพื่อให้ส่งไปพร้อมกับข้อความด้วย ให้เข้าไปยังเมลล์นั้นมันไม่ได้ครับ โดยปัญหาที่เจอคือ เมื่อไปเช็คเมลล์ดู ข้อความมาได้ปรกติ ส่วนไฟล์แนบนั้นจะมาแต่ชื่อครับ ผมส่ง code ส่วนที่ใช้ส่งเมลล์พร้อมภาพที่รับไฟล์ ของ hotmail มาให้ดูประกอบด้วยครับ code มีดังนี้ครับ

<?php
$selectprename=$_POST[selectprename];
$txtname=$_POST[txtname];
$txtborn=$_POST[txtborn];
.......
.........
..........

//รับชื่อไฟล์แนบมา 2 ไฟล์
$strFilesName1 = $_FILES["strfilename1"]["name"];
$strFilesName2 = $_FILES["strfilename2"]["name"];

$txtsubject = ข้อมูลผู้สมัครใหม่จากคุณ . $txtname;

$to = "PM.com";
$subject = "$txtsubject";
$txt = "ª×èÍ: $selectprename $txtname ";
$txt .= "<br />";
$txt .= "à¡Ô´: $txtborn";
.....
.....
.....
$strSid = md5(uniqid(time()));

$headers = "";
$headers .= 'From:' . $txtname . "\r\n";

$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n";
$headers .= "This is a multi-part message in MIME format.\n";
$headers .= "--".$strSid."\n";
$headers .= "Content-type: text/html; charset=windows-874\n"; // or UTF-8 //
$headers .= "Content-Transfer-Encoding: 7bit\n\n";
$headers .= $txt."\n\n";


//*** Files 1 ***//
// ช่วงรับไฟล์แนบที่ 1
$strContent1 = chunk_split(base64_encode(file_get_contents($strFilesName1)));
$headers .= "--".$strSid."\n";
$headers .= "Content-Type: application/octet-stream; name=\"".$strFilesName1."\"\n";
$headers .= "Content-Transfer-Encoding: base64\n";
$headers .= "Content-Disposition: attachment; filename=\"".$strFilesName1."\"\n\n";
$headers .= $strContent1."\n\n";

//*** Files 2 ***//
//ช่วงรับไฟล์แนบที่ 2
$strContent2 = chunk_split(base64_encode(file_get_contents($strFilesName2)));
$headers .= "--".$strSid."\n";
$headers .= "Content-Type: application/octet-stream; name=\"".$strFilesName2."\"\n";
$headers .= "Content-Transfer-Encoding: base64\n";
$headers .= "Content-Disposition: attachment; filename=\"".$strFilesName2."\"\n\n";
$headers .= $strContent2."\n\n";
//$flgSend = @mail($strTo,$strSubject,null,$strHeader); // @ = No Show Error //


$flgSend = @mail($to,$subject,null,$headers); // @ = No Show Error //
if($flgSend)
{
echo "ทางเราได้รับข้อมูลจากท่านแล้ว กรุณารอการติดต่อกลับ";
}
else {
echo "Email Can Not Send.";
}
?>
Attachments
attachfile.jpg
attachfile.jpg (29.02 KiB) Viewed 1216 times
attachfile1.jpg
attachfile1.jpg (41.94 KiB) Viewed 1216 times
User avatar
tissana
PHP Sr. Member
PHP Sr. Member
Posts: 84
Joined: 01/01/1970 7:00 am
Contact:

Re: ใช้ฟังก์ชั่นเมลล์และส่งไฟล์แนบไปด้วย ทำอย่างไรครับ

Post by tissana »

ตอนนี้ได้ลองทดสอบใหม่ กลายเป็นว่ามันฟ้อง Error เกี่ยวกับ ฟังก์ชั่น file_get_contents ตามรูปที่แนบมาครับ ไม่ทราบว่าจะแก้อย่างไรดีครับ
Attachments
error_attachfile.jpg
error_attachfile.jpg (82.72 KiB) Viewed 1040 times
User avatar
tissana
PHP Sr. Member
PHP Sr. Member
Posts: 84
Joined: 01/01/1970 7:00 am
Contact:

Re: ใช้ฟังก์ชั่นเมลล์และส่งไฟล์แนบไปด้วย ทำอย่างไรครับ

Post by tissana »

แสดงรูปใหม่อีกครั้ง รูปนั้นตก วงเล็บปิดไปครับ
Attachments
error_attachfile.jpg
error_attachfile.jpg (85.23 KiB) Viewed 1040 times
User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 25610
Joined: 22/09/2008 6:18 pm
Contact:

Re: ใช้ฟังก์ชั่นเมลล์และส่งไฟล์แนบไปด้วย ทำอย่างไรครับ

Post by mindphp »

ลองเช็ค ก่อนว่า
ไฟล์จริงๆ $strFilesName1 บน server มีอยู่จริงหรือเปล่า
https://www.mindphp.com/modules.php?name ... xists.html
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
User avatar
tissana
PHP Sr. Member
PHP Sr. Member
Posts: 84
Joined: 01/01/1970 7:00 am
Contact:

Re: ใช้ฟังก์ชั่นเมลล์และส่งไฟล์แนบไปด้วย ทำอย่างไรครับ

Post by tissana »

ไฟล์จริงๆ $strFilesName1 และ $strFilesName12 บน server มีอยู่ครับ โดยผมไปเพิ่ม code ให้มีการ upload file แนบทั้ง 2 ไปเก็บไว้ที่ server ด้วย โดยให้ไปเก็บไว้ที่ โฟลเดอร์ saveattachfiles ดังนี้ครับ

<?php
.....
.....
.....
$newpath = "/home/......./testprogram/saveattachfiles/".$newfilename;
//ใช้คำสั่ง move-upload-file เพื่อเก็บไฟล์แนบเข้าไปเก็บไว้ที่โฟลเดอร์ saveattachfiles ";
move_uploaded_file($pic,$newpath);
....
.....
....
?>
User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 25610
Joined: 22/09/2008 6:18 pm
Contact:

Re: ใช้ฟังก์ชั่นเมลล์และส่งไฟล์แนบไปด้วย ทำอย่างไรครับ

Post by mindphp »

mindphp wrote:ลองเช็ค ก่อนว่า
ไฟล์จริงๆ $strFilesName1 บน server มีอยู่จริงหรือเปล่า
https://www.mindphp.com/modules.php?name ... xists.html
มันหาไฟล์ ที่ต้องการอ่านไม่เจอ ลองใช้ function ที่แนะนำเช็คก่อนว่ามีไฟล์ และ path ถูกตำแหน่งที่ต้องการอ่านหรือเปล่า
และ ไฟล์รูปภาพ เอา function file_get_contents() มาอ่านไม่ได้
ลองเปลี่ยนไปใช้

Code: Select all

<?php

    $file = fopen( $fileatt, ‘rb’ );

    $data = fread( $file, filesize( $fileatt ) );

    fclose( $file );

    ?>
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
User avatar
tissana
PHP Sr. Member
PHP Sr. Member
Posts: 84
Joined: 01/01/1970 7:00 am
Contact:

Re: ใช้ฟังก์ชั่นเมลล์และส่งไฟล์แนบไปด้วย ทำอย่างไรครับ

Post by tissana »

ได้แล้วครับตามที่คุณ mindphp ว่านะครับสงสัยใช้ function file_get_contents() มาอ่านไม่ได้ ผมไปค้นเจอ code ใหม่ประมาณนี้ครับ แล้วลองเอามาปรับแต่ง ตอนนี้สามารถแนบไฟล์ไปได้แล้วครับ 2 ไฟล์ด้วยกัน code ประมาณนี้ครับ
<?php
......
.......
.......
$my_file = "/saveattachfiles/";
$my_path = $_SERVER['DOCUMENT_ROOT'];

$fileatt = $my_path.$my_file; // Path to the file
$fileatt_type = "application/octet-stream"; // File Type
$fileatt_name = $letter1; // Filename that will be used for the file as the attachment

$email_from = $txtemail; // Who the email is from
$email_subject = $txtsubject; // The Subject of the email
$email_message = $txt; // Message that the email has in it

$email_to = $To; // Who the email is too

if ($txtemail == ""){
$email_from = $txtname . "PM.com";
}

$headers = "From: ".$email_from;


$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";

$email_message .= "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type:text/html; charset=\"windows-874\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$email_message . "\n\n";


/********************************************** First File ********************************************/


// keep attach file 1
$tmp_name1 = $_FILES["strfilename1"]["tmp_name"]; //$_POST[pic_ans];
$strFilesName1 = $_FILES["strfilename1"]["name"];

if ($strFilesName1 != "") {
//echo "temp_name1 and strFilesName1 is $tmp_name1 and $strFilesName1 <br />";
$value = uploadpicture($tmp_name1,$strFilesName1);
$letter1 = $value[$strFilesName1];

$fileatt = $my_path.$my_file.$letter1; // Path to the file
$fileatt_type = "application/octet-stream"; // File Type
$fileatt_name = $letter1; // Filename that will be used for the file as the attachment

$file = fopen($fileatt,'rb');
$data = fread($file,filesize($fileatt));
fclose($file);
//echo "data from First file before function chunk is $data <br />";

$data = chunk_split(base64_encode($data));

//echo "data from First file after function chunk is $data <br />";

$email_message .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatt_type};\n" .
" name=\"{$fileatt_name}\"\n" .
//"Content-Disposition: attachment;\n" .
//" filename=\"{$fileatt_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--{$mime_boundary}\n";
unset($data);
unset($file);
unset($fileatt);
unset($fileatt_type);
unset($fileatt_name);
}

/********************************************** Second File ********************************************/

// keep attach file 2
$tmp_name2 = $_FILES["strfilename2"]["tmp_name"]; //$_POST[pic_ans];
$strFilesName2 = $_FILES["strfilename2"]["name"];

if ($strFilesName2 != "") {

$value = uploadpicture($tmp_name2,$strFilesName2);
$letter2 = $value[$strFilesName2];

$fileatt = $my_path.$my_file.$letter2; // Path to the file
$fileatt_type = "application/octet-stream"; // File Type
$fileatt_name = $letter2; // Filename that will be used for the file as the attachment

$file = fopen($fileatt,'rb');
$data = fread($file,filesize($fileatt));
fclose($file);

//echo "data from Second file before function chunk is $data <br />";

$data = chunk_split(base64_encode($data));

$email_message .= "Content-Type: {$fileatt_type};\n" .
" name=\"{$fileatt_name}\"\n" .
//"Content-Disposition: attachment;\n" .
//" filename=\"{$fileatt_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--{$mime_boundary}--\n";
unset($data);
unset($file);
unset($fileatt);
unset($fileatt_type);
unset($fileatt_name);

}
/********************************************** End of File Config ********************************************/

// To add more files just copy the file section again, but make sure they are all one after the other! If they are not it will not work!


$ok = @mail($email_to, $email_subject, $email_message, $headers);

if($ok) {
echo "<font face=verdana size=2>ระบบได้ทำการจัดเก็บข้อมูลแล้ว กรุณารอการติดต่อกลับ</font>";
} else {
die("ขออภัย ระบบไม่สามรถจัดเก็บข้อมูลของท่านได้ในขณะนี้ กรุณาลองใหม่");
}
.....
.....
?>
Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “Programming - PHP”

Who is online

Users browsing this forum: Google [Bot] and 14 guests