473,406 Members | 2,867 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,406 software developers and data experts.

mail with file attachment

114 100+
Dear Sir,

I have created a simple request form which will be mailed to me.

Now I want to attach files and send it through that request form.

For this I am using the following script:

[PHP]<?php
function mail_attachment ($from , $to, $subject, $message, $attachment){
$fileatt = $attachment; // Path to the file
$fileatt_type = "application/octet-stream"; // File Type
$start= strrpos($attachment, '/') == -1 ? strrpos($attachment, '//') : strrpos($attachment, '/')+1;
$fileatt_name = substr($attachment, $start, strlen($attachment)); // Filename that will be used for the file as the attachment

$email_from = $from; // Who the email is from
$email_subject = $subject; // The Subject of the email

$email_txt = $message; // Message that the email has in it

$email_to = $to; // Who the email is to

$headers = "From: ".$email_from;

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


$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_txt . "\n\n";

$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";


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

if($ok) { echo "yes";//header('Location:newrequestsubmit_y.html');
} else {
header('Location:newsubmit_n.html');
}
}

?>[/PHP]


In the below coding I am calling the mail_attachment function.


[PHP]<?
include 'mail_attachment.php';

if (!$_POST['newproject'])
$errors[] = "Project name is required";
else
$newproject = $_POST['newproject'];
// if there are any errors, display them
if (count($errors)>0) {
foreach($errors as $err)
echo "$err<br>\n";
echo "<br>Please use your browser's Back button to fix.";
} else {
// no errors, so we build our message

$to = "designhd@sitanet.com";
$subject = "Your request";
$from = stripslashes($_POST['email']);

$msg = "Sendor Information\n";
$msg.= "\nName: ".$_POST['fname']." ".$_POST['lname'];
$msg.= "\nOffice: ".$_POST['office'];
$msg.= "\nEmail: ".$_POST['email'];
$msg.= "\nExtn.: ".$_POST['extn'];

$msg.= "\n\nProject name: ".$newproject;
$msg.="\nMedia type: ".$_POST['media'];

switch($_POST['project_type']){
case 'web_banner':
$proj_type = "Web Banner";
break;
case 'print_banner':
$proj_type = "Print Banner";
break;
case 'flyer':
$proj_type = "Flyer";
break;
case 'invitation':
$proj_type = "Invitation";
break;
case 'program':
$proj_type = "Program";
break;
case 'other':
$proj_type = $_POST['other'];
break;
default:
$proj_type = " ";
}


$msg.="\nProject type: ".$proj_type;
$msg.="\nSize: Height = ".$_POST['height']." ".$_POST['dimension'].", Width = ".$_POST['width']." ".$_POST['dimension'];
$msg.="\nColor: ".$_POST['color'];

switch($_POST['month']){
case '1':
$month = "January";
break;
case '2':
$month = "February";
break;
case '3':
$month = "March";
break;
case '4':
$month = "April";
break;
case '5':
$month = "May";
break;
case '6':
$month = "June";
break;
case '7':
$month = "July";
break;
case '8':
$month = "August";
break;
case '9':
$month = "September";
break;
case '10':
$month = "October";
break;
case '11':
$month = "November";
break;
case '12':
$month = "December";
break;
default:
$month = " ";
}




$msg.="\nDue date: ".$_POST['date']." ".$month.", ".$_POST['year'];
$msg.="\nTime by: ".$_POST['hours']." Hrs ".$_POST['minutes']." Mins".$_POST['standard'];
$msg.="\nDescription: ".stripslashes($_POST['description'])."\n";
$msg.="\nNumber of files: ".$_POST['files'];
$msg.="\nQuality/Resolution of files: ".$_POST['quality'];


$pdf=($_POST['PDF'])?"PDF: Yes":"PDF: No";
$jpg=($_POST['JPG'])?"JPG: Yes":"JPG: No";
$gif=($_POST['GIF'])?"GIF: Yes":"GIF: No";
$psd=($_POST['PSD'])?"PSD: Yes":"PSD: No";
$others=($_POST['OTHERS'])?"OTHERS: Yes".$_POST['out_format']:"OTHERS: No";

$msg.="\n\nOutput format:\n\n$pdf\n$jpg\n$gif\n$psd\n$others\n";



mail_attachment($from, $to, $subject, $msg, 'mail_attachment.php');
}
?>[/PHP]


1. Now.....When I submit the form the attachment file comes to me with 'ail_attachment.php' as you can see in coding it is 'mail_attachment.php'.

I can't understand why 'm' is cutting in the file name.

2. And second the email text is coming to me in one line constantly. It means the '\n' (line break or next line) is not working. I don't know why?


Appreciate if you can please help me.......I really really need your help.

I need two things to be done:

1. More than one file to be attach and sent.
2. Proper email message should come.



Thanks
Deepak
Mar 12 '07 #1
9 4161
ronverdonk
4,258 Expert 4TB
These statements in your code cause the first char of the attachment name to be stripped off:
[php]$start=strrpos($attachment, '/') == -1 ? strrpos($attachment, '//') : strrpos($attachment, '/')+1;
$fileatt_name = substr($attachment, $start, strlen($attachment)); [/php]

The eol problem could be caused by the Windows system. The following sample (I always use it) is to set the $eol variable with the end-of-line string depending on the OS. Then use the $eol variable instead of hardcoding the "\n".
[php]
# Is the OS Windows or Mac or Linux
if (strtoupper(substr(PHP_OS,0,3)=='WIN')) {
$eol="\r\n";
} elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')) {
$eol="\r";
} else {
$eol="\n";
}[/php]

Ronald :cool:
Mar 12 '07 #2
deepaks85
114 100+
These statements in your code cause the first char of the attachment name to be stripped off:
[php]$start=strrpos($attachment, '/') == -1 ? strrpos($attachment, '//') : strrpos($attachment, '/')+1;
$fileatt_name = substr($attachment, $start, strlen($attachment)); [/php]

The eol problem could be caused by the Windows system. The following sample (I always use it) is to set the $eol variable with the end-of-line string depending on the OS. Then use the $eol variable instead of hardcoding the "\n".
[php]
# Is the OS Windows or Mac or Linux
if (strtoupper(substr(PHP_OS,0,3)=='WIN')) {
$eol="\r\n";
} elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')) {
$eol="\r";
} else {
$eol="\n";
}[/php]

Ronald :cool:

I really appreciate your reply sir. But it is still not working for me......the email message is still in constantly one line...Below is the example


[HTML]Sendor Information Name: Deepak Saxena Office: Onlineres Email: deepaks85@gmail.com Extn.: 18185748468 Project name: Syrian air project Media type: Web Project type: Print Banner Size: Height = 34 inch, Width = 34 inch Color: Limited colors Due date: 4 March, 2007 Time by: 5 Hrs 4 MinsIST Description: Please send to me. Number of files: 3 Quality/Resolution of files: High resolution Output format: PDF: Yes JPG: Yes GIF: No PSD: Yes OTHERS: No[/HTML]
Mar 12 '07 #3
deepaks85
114 100+
I really appreciate your reply sir. But it is still not working for me......the email message is still in constantly one line...Below is the example


[HTML]Sendor Information Name: Deepak Saxena Office: Onlineres Email: deepaks85@gmail.com Extn.: 18185748468 Project name: Syrian air project Media type: Web Project type: Print Banner Size: Height = 34 inch, Width = 34 inch Color: Limited colors Due date: 4 March, 2007 Time by: 5 Hrs 4 MinsIST Description: Please send to me. Number of files: 3 Quality/Resolution of files: High resolution Output format: PDF: Yes JPG: Yes GIF: No PSD: Yes OTHERS: No[/HTML]
Here is the code again:



[PHP]<?
include 'mail_attachment.php';


# Is the OS Windows or Mac or Linux

if (strtoupper(substr(PHP_OS,0,3)=='WIN')) {
$eol="\r\n";
} elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')) {
$eol="\r";
} else {
$eol="\n";
}




if (!$_POST['newproject'])
$errors[] = "Project name is required";
else
$newproject = $_POST['newproject'];
// if there are any errors, display them
if (count($errors)>0) {
foreach($errors as $err)
echo "$err<br>\n";
echo "<br>Please use your browser's Back button to fix.";
} else {
// no errors, so we build our message




$to = "deepaks85@gmail.com";
$subject = "Your request";
$from = stripslashes($_POST['email']);

$msg = "Sendor Information".$eol;
$msg.= $eol."Name: ".$_POST['fname']." ".$_POST['lname'];
$msg.= $eol."Office: ".$_POST['office'];
$msg.= $eol."Email: ".$_POST['email'];
$msg.= $eol."Extn.: ".$_POST['extn'];

$msg.= $eol."Project name: ".$newproject;
$msg.=$eol."Media type: ".$_POST['media'];

switch($_POST['project_type']){
case 'web_banner':
$proj_type = "Web Banner";
break;
case 'print_banner':
$proj_type = "Print Banner";
break;
case 'flyer':
$proj_type = "Flyer";
break;
case 'invitation':
$proj_type = "Invitation";
break;
case 'program':
$proj_type = "Program";
break;
case 'other':
$proj_type = $_POST['other'];
break;
default:
$proj_type = " ";
}


$msg.=$eol."Project type: ".$proj_type;
$msg.=$eol."Size: Height = ".$_POST['height']." ".$_POST['dimension'].", Width = ".$_POST['width']." ".$_POST['dimension'];
$msg.=$eol."Color: ".$_POST['color'];

switch($_POST['month']){
case '1':
$month = "January";
break;
case '2':
$month = "February";
break;
case '3':
$month = "March";
break;
case '4':
$month = "April";
break;
case '5':
$month = "May";
break;
case '6':
$month = "June";
break;
case '7':
$month = "July";
break;
case '8':
$month = "August";
break;
case '9':
$month = "September";
break;
case '10':
$month = "October";
break;
case '11':
$month = "November";
break;
case '12':
$month = "December";
break;
default:
$month = " ";
}




$msg.=$eol."Due date: ".$_POST['date']." ".$month.", ".$_POST['year'];
$msg.=$eol."Time by: ".$_POST['hours']." Hrs ".$_POST['minutes']." Mins".$_POST['standard'];
$msg.=$eol."Description: ".stripslashes($_POST['description'])."\n";
$msg.=$eol."Number of files: ".$_POST['files'];
$msg.=$eol."Quality/Resolution of files: ".$_POST['quality'];



$pdf=($_POST['PDF'])?"PDF: Yes":"PDF: No";
$jpg=($_POST['JPG'])?"JPG: Yes":"JPG: No";
$gif=($_POST['GIF'])?"GIF: Yes":"GIF: No";
$psd=($_POST['PSD'])?"PSD: Yes":"PSD: No";
$others=($_POST['OTHERS'])?"OTHERS: Yes".$_POST['out_format']:"OTHERS: No";

$msg.=$eol."Output format:\n\n$pdf\n$jpg\n$gif\n$psd\n$others\n";

mail_attachment($from, $to, $subject, $msg, 'dhd.gif');
}

?>[/PHP]
Mar 12 '07 #4
ronverdonk
4,258 Expert 4TB
I still do not know the cause but the following piece of your code (in the function) causes the eols to disappear. I commented it out and it emailed the correct formatted text with newlines. So you'll have to look inside this piece of code to pinpoint the error.

[php]
$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_txt . "\n\n";

$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"; [/php]

Ronald :cool:
Mar 12 '07 #5
deepaks85
114 100+
I still do not know the cause but the following piece of your code (in the function) causes the eols to disappear. I commented it out and it emailed the correct formatted text with newlines. So you'll have to look inside this piece of code to pinpoint the error.

[php]
$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_txt . "\n\n";

$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"; [/php]
Dear Sir,

I found the error by searching on net.

Below is the previous coding:

[PHP]$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_txt . "\n\n"; [/PHP]

Here you can see on line:

[PHP] "Content-Type:text/html; charset=\"iso-8859-1\"\n" . [/PHP]

We have to write:
[PHP] "Content-Type:text/plain; charset=\"iso-8859-1\"\n" . [/PHP]
instead of previous one.

Thanks very much for your kind cooperation sir. The file name is also coming with the full name. Your assumtion were right.

Now can you please help in that how can I attach and send more than one file?
Mar 13 '07 #6
ronverdonk
4,258 Expert 4TB
Attachments with the mail() function are complex but possible. You just have to have boundaries between the various sections of the e-mail. See this sample where 2 images are to be attached. Of course you'll have to adapt it to suit the files you want to attach:
[php]// Add file attachment to the message (image attachment 1)
// Base64 encode the file data first
$data = chunk_split(base64_encode($data));
$message .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatt_type};\n" . // {$fileatt_type}
" name=\"{$fileatt_name}\"\n" .//attachment one
"Content-Disposition: inline;\n" .
" filename=\"{$fileatt_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--{$mime_boundary}--\n";//end first attachment
//************************************************** *********
// Add file attachment to the message (image attachment 2)
// Base64 encode the file datadata first
$data2 = chunk_split(base64_encode($data2));
$message .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatt_type2};\n" . // {$fileatt_type}
" name=\"{$fileatt_name2}\"\n" .//attachment 2
"Content-Disposition: inline;\n" .
" filename=\"{$fileatt_name2}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data2 . "\n\n" .
"--{$mime_boundary}--\n";//end second attachment
//************************************************** ********** [/php]

Ronald :cool:
Mar 13 '07 #7
deepaks85
114 100+
Attachments with the mail() function are complex but possible. You just have to have boundaries between the various sections of the e-mail. See this sample where 2 images are to be attached. Of course you'll have to adapt it to suit the files you want to attach:
[php]// Add file attachment to the message (image attachment 1)
// Base64 encode the file data first
$data = chunk_split(base64_encode($data));
$message .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatt_type};\n" . // {$fileatt_type}
" name=\"{$fileatt_name}\"\n" .//attachment one
"Content-Disposition: inline;\n" .
" filename=\"{$fileatt_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--{$mime_boundary}--\n";//end first attachment
//************************************************** *********
// Add file attachment to the message (image attachment 2)
// Base64 encode the file datadata first
$data2 = chunk_split(base64_encode($data2));
$message .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatt_type2};\n" . // {$fileatt_type}
" name=\"{$fileatt_name2}\"\n" .//attachment 2
"Content-Disposition: inline;\n" .
" filename=\"{$fileatt_name2}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data2 . "\n\n" .
"--{$mime_boundary}--\n";//end second attachment
//************************************************** ********** [/php]
Thanks very much for your kind cooperation sir. After reading the script it, I think if we want to send more than one file then we will have to write script again and again for each file.

I have got a little script on the internet. Here is the link:
http://4wordsystems.com/php_mail_attachment.php

Please check it and advice me. Can I do like they mentioned in the script.

Can I have your personal email ID, if you can provide me?


Thanks
Deepak
Mar 15 '07 #8
There is no need of 11 th line. ie the MIME boundary..... for sending multiple attachments.....
Oct 16 '07 #9
ronverdonk
4,258 Expert 4TB
There is no need of 11 th line. ie the MIME boundary..... for sending multiple attachments.....
Agreed, but it makes the explanatory code better structured and more readable.

Ronald
Oct 16 '07 #10

Sign in to post your reply or Sign up for a free account.

Similar topics

1
by: William Connery | last post by:
Hi, I have a small python program with e-mail capabilities that I have pieced together from code snippets found on the internet. The program uses the smtplib module to successfully send an...
2
by: eng.sharif | last post by:
hi group how i can send mail and attachement in php with "mail function " $s = mail($to,$subject,$cont, $headers); can anyone help
2
by: Ruud | last post by:
Just before leaving for a holiday my collegue modified this script. Now it won't send any body text (The data filled in on the form) and in an error condition it won't send any attachments either....
1
by: nukephp | last post by:
Hello Guys would you know about php email with his attachment Working on linux platform................................................... The code as below: mail.php <?php //define the...
1
by: Chitu03 | last post by:
Hi I am already send a mail using Php with some attachement into it. My Problem is the attachement file is in my Database(mysql). I don't know how can i get from database and then add to my mail....
1
by: rengaraj | last post by:
hi dears! in my webapp i have some users, thats are in 3 Roles. i want to do communication between them via mail system. this means that Role 1 attach one file and this file must send via mail...
3
by: raj200809 | last post by:
when i m sending mail i received error from symantec Antivirus" Your email message was unable to be sent because your mail server rejected the message 550-5.7.1 the ip you’re using to send mail is...
1
by: deepaks85 | last post by:
Dear All, I want to send some data through a form with Multiple attachment in an HTML Format. I have tried it but it is not working for me. I am able to send data without attachment but with the...
7
by: mukeshrasm | last post by:
Hi I am no able to send mail and it is giving this error Warning: mail(): SMTP server response: 530 5.7.3 Client was not authenticated in c:\inetpub\wwwroot\eshop\includes\classes\email.php on...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.