اشکال در ارسال ایمیل همراه attachment با php

Zoya

New Member
:razz: سلام . من یک فرم تهیه کرده ام و می خوام با php یک فایل را آپلود کنم و همراه فرم تکمیل شده به ایمیل خودم بفرستم . کد php در زیر آوردم . مشکل این کد اینست که تمام مشخصات را برایم ایمیل می کند به جز فایل که آن هم به صورت noname و حجم صفر کیلوبایت است . در ضمن در خطوط مشخص شده پیام خطا داده می شود که من نمی دانم چطور این مشکل را برطرف کنم . لطفا راهنمایی کنید. متشکرم.​

PHP:
<?php
  
$email_from = $email; // Who the email is from 
$email_subject = $_POST['mozoo']; // The Subject of the email 
$email_message.= " موضوع  ";
$email_message.= $_POST['mozoo'];
$email_message.= "<br>";
$email_message.= " نوع ترجمه ";
$email_message.= $_POST['noe'];
$email_message.= "<br>";
$email_message.= " زبان ";
$email_message.= $_POST['zaban'];
$email_message.= "<br>";
$email_message.= " نام و نام خانوادگي ";
$email_message.= $_POST['naam'];
$email_message.= "<br>";
$email_message.= " شماره شناسنامه ";
$email_message.= $_POST['shenasnameh'];
$email_message.= "<br>";
$email_message.= " تلفن تماس ";
$email_message.= $_POST['phone'] . 'با پيش شماره ' .$_POST['pishphone'];
$email_message.= "<br>";
$email_message.= " موبايل ";
$email_message.= $_POST['mobile'];
$email_message.= "<br>";
$email_message.= " ايميل ";
$email_message.= $_POST['email'];
$email_message.= "<br>";
$email_message.= " نحوه ارسال ";
$email_message.= $_POST['ersal'];
$email_message.= "<br>";
$email_to = "MYNAME[EMAIL="[email protected]"]@Email.com[/EMAIL]"; // Who the email is too 
$headers = "From: ".$email;
$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=\"iso-8859-1\"\n" . 
"Content-Transfer-Encoding: 7bit\n\n" . 
$email_message . "\n\n"; 
/************************ First File *********************************/
$fileatt = $userfile; // Path to the file 
$fileatt_type = $userfile_type; // File Type 
$fileatt_name = $userfile_name; // Filename that will be used for the file as the attachment 
$file = fopen($fileatt,'rb'); 
[COLOR=red]$data = fread($file,filesize($fileatt)); 
fclose($file);[/COLOR] 
$data = chunk_split(base64_encode($data)); 
$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);
$ok = @mail($email_to, $email_subject, $email_message, $headers); 
if($ok) { 
echo "<font face=verdana size=2>The file was successfully sent!</font>"; 
} else { 
die("Sorry but the email could not be sent. Please go back and try again!"); 
} 
?>
 
آخرین ویرایش توسط مدیر:

jhoseini

Member
من مشکل کد بالا رو نمیدونم، (شرمنده، وقت نکردم برسی کنم)
اما یه نمونه خودم دارم، میزارم اینجا، شاید بدرد خورد : )
 

Zoya

New Member
من مشکل کد بالا رو نمیدونم، (شرمنده، وقت نکردم برسی کنم)
اما یه نمونه خودم دارم، میزارم اینجا، شاید بدرد خورد : )

از فايل خيلي ممنون . ولي مشكل من اينجاست كه يك فرم با نام form.htm دارم كه داخل آن بصورت زير از كاربر محل فايل آپلود را سوال مي كند :
HTML:
[left]<form enctype="multipart/form-data" action="email.php" method="POST">
<p align="center"><font face="Tahoma"><font size="2">فايل متن : 
</font> 
<input name="uploaded" type="file" size="40" ><font size="2">(doc or pdf)<br>
<input type="submit" value="ارسال" style="font-family: Tahoma" /><font face="Tahoma" size="2">
</form>
[/left]
اين فرم فايل email.php را صدا مي كند . حالا مشكل من اينجاست كه چطور به متغير $attachment آدرس فايلي كه كاربر مشخص كرده را معرفي و مقدار دهي كنم؟
اين قسمتي از فايلي كه زحمت كشيديد و براي من لينكش را گذاشتيد در زير آورده ام :​
PHP:
[left]<?php
function mail_attachment ($from , $to, $subject, $message, $attachment){
$fileatt = $attachment; // Path to the file
.
.
$file = fopen($fileatt,'rb');
$data = fread($file,filesize($fileatt));
fclose($file);
[/left]
و در اين سه خط آخر خطا مي دهد. چون من نتوانسته ام فايل مبدا را برايش مشخص كنم. لطفا در اين مورد بنده را راهنمايي فرماييد كه چطور مقدار را از فرم اچ تي ام ال به فايل پي اچ پي منتقل كنم ؟:cry:

باز هم از شما ممنونم .​
 
آخرین ویرایش:

jhoseini

Member
به جای
PHP:
$file = fopen($fileatt,'rb'); 
$data = fread($file,filesize($fileatt)); 
fclose($file);
از
PHP:
$data=implode('',file($_FILES['uploaded']['tmp_name']));
استفاده کنید، شاید مشکل حل شه
169.gif
 

Zoya

New Member
به جای
PHP:
$file = fopen($fileatt,'rb'); 
$data = fread($file,filesize($fileatt)); 
fclose($file);
از
PHP:
$data=implode('',file($_FILES['uploaded']['tmp_name']));
استفاده کنید، شاید مشکل حل شه
169.gif

خیلی ممنون از راهنمایی خوبتون .فایل را میفرسته . فقط یک مشکلی هست که اسم و پسوند فایل را نگه نمی دارد و انرا به noname.txt میفرسته . در مورد این هم اگر ممکنه راهنمایی کنید. با تشکر:)
 

jhoseini

Member
ببینید، برای سرور شما $userfile یا $userfile_name تعریف شده نیست
به دلایل امنیتی احتمالاً register_global بسته شده
شما مجبورید به جای :
PHP:
$fileatt = $userfile; // Path to the file 
$fileatt_type = $userfile_type; // File Type 
$fileatt_name = $userfile_name;
بنویسید
PHP:
$fileatt = $_FILES['uploaded']['tmp_name']; // Path to the file 
$fileatt_type = $_FILES['uploaded']['type']; // File Type 
$fileatt_name = $_FILES['uploaded']['name'];
گرچه، حدس میزنم اگهregister_global هم باز بود ای کد کار نمیکرد
164.gif
 

Zoya

New Member
بنویسید
PHP:
$fileatt = $_FILES['uploaded']['tmp_name']; // Path to the file 
$fileatt_type = $_FILES['uploaded']['type']; // File Type 
$fileatt_name = $_FILES['uploaded']['name'];
گرچه، حدس میزنم اگهregister_global هم باز بود ای کد کار نمیکرد
164.gif
[/quote]

:Dخيلي ممنون درست شد.:D
اگر امكان داره يك كتاب مرجع خوب برام معرفي كنيد . باز هم از راهنمايي هاي خوبتون متشكرم:wink:
 

jhoseini

Member
در مورد کتاب مرجع و منابع آموزشی، یه جستجو تو فاروم بکنید
تاپیک های زیادی راجه بهش زدن
 

جدیدترین ارسال ها

بالا