通过 php 表单通过电子邮件发送文件

发布于 2024-08-09 01:53:38 字数 161 浏览 2 评论 0原文

我在互联网上进行了研究,但找不到我需要的东西:/

我有一个联系表格,(php)。我没有任何数据库。这是一个简单的 php 电子邮件表单,但现在我需要使用文件附件来制作它:/如何通过联系表单通过电子邮件发送文件?访问者将从他的计算机浏览任何文件并通过表单发送电子邮件。

欣赏!!

I researched over the internet, but could not find what i need :/

I have a contact form, (php). I dont have any database. it is a simple php email form, but now I need to make it with file attachment :/ how can I email file via contact form? visitor will browse any file from his computer and send email via form.

appreciate!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

那些过往 2024-08-16 01:53:38

使用您可以在互联网上找到的文件上传脚本(例如 http://www.w3schools.com /php/php_file_upload.asp)。然后你就有了一些临时文件,我们称之为file_to_send。然后只需使用 I.devries 评论中提到的代码( http://webcheatsheet.com/php/ send_email_text_html_attachment.php )用于将附件与邮件一起发送。

您可以在下面找到一些从上述站点复制粘贴的代码,但进行了必要的调整。

HTML:

<form action="upload_file.php" method="post" enctype="multipart/form-data">
    <label for="file_to_send">Filename:</label>
    <input type="file" name="file_to_send" id="file_to_send"><br>
    <input type="submit" name="submit" value="Submit">
</form>

PHP:

<?php 
//define the receiver of the email 
$to = '[email protected]'; 
//define the subject of the email 
$subject = 'Test email with attachment'; 
//create a boundary string. It must be unique 
//so we use the MD5 algorithm to generate a random hash 
$random_hash = md5(date('r', time())); 
//define the headers we want passed. Note that they are separated with \r\n 
$headers = "From: [email protected]\r\nReply-To: [email protected]"; 
//add boundary string and mime type specification 
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 
//read the atachment file contents into a string,
//encode it with MIME base64,
//and split it into smaller chunks
$attachment = chunk_split(base64_encode(file_get_contents($_FILES['file_to_send']['tmp_name']))); 
//define the body of the message. 
ob_start(); //Turn on output buffering 
?> 
--PHP-mixed-<?php echo $random_hash; ?>  
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>" 

--PHP-alt-<?php echo $random_hash; ?>  
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit

Hello World!!! 
This is simple text email message. 

--PHP-alt-<?php echo $random_hash; ?>  
Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit

<h2>Hello World!</h2> 
<p>This is something with <b>HTML</b> formatting.</p> 

--PHP-alt-<?php echo $random_hash; ?>-- 

--PHP-mixed-<?php echo $random_hash; ?>  
Content-Type: application/zip; name="attachment.zip"  
Content-Transfer-Encoding: base64  
Content-Disposition: attachment  

<?php echo $attachment; ?> 
--PHP-mixed-<?php echo $random_hash; ?>-- 

<?php 
//copy current buffer contents into $message variable and delete current output buffer 
$message = ob_get_clean(); 
//send the email 
$mail_sent = @mail( $to, $subject, $message, $headers ); 
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
echo $mail_sent ? "Mail sent" : "Mail failed"; 
?>

Use a file upload script like you can find on the internet (e.g. http://www.w3schools.com/php/php_file_upload.asp). Then you have some temporary file, let's call it file_to_send. Then just use the code as mentioned in the comments by I.devries ( http://webcheatsheet.com/php/send_email_text_html_attachment.php ) for sending the attachment together with your mail.

Below you can find some copy pasted code from the sites mentioned above, but with the necessary adjustements.

HTML:

<form action="upload_file.php" method="post" enctype="multipart/form-data">
    <label for="file_to_send">Filename:</label>
    <input type="file" name="file_to_send" id="file_to_send"><br>
    <input type="submit" name="submit" value="Submit">
</form>

PHP:

<?php 
//define the receiver of the email 
$to = '[email protected]'; 
//define the subject of the email 
$subject = 'Test email with attachment'; 
//create a boundary string. It must be unique 
//so we use the MD5 algorithm to generate a random hash 
$random_hash = md5(date('r', time())); 
//define the headers we want passed. Note that they are separated with \r\n 
$headers = "From: [email protected]\r\nReply-To: [email protected]"; 
//add boundary string and mime type specification 
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 
//read the atachment file contents into a string,
//encode it with MIME base64,
//and split it into smaller chunks
$attachment = chunk_split(base64_encode(file_get_contents($_FILES['file_to_send']['tmp_name']))); 
//define the body of the message. 
ob_start(); //Turn on output buffering 
?> 
--PHP-mixed-<?php echo $random_hash; ?>  
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>" 

--PHP-alt-<?php echo $random_hash; ?>  
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit

Hello World!!! 
This is simple text email message. 

--PHP-alt-<?php echo $random_hash; ?>  
Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit

<h2>Hello World!</h2> 
<p>This is something with <b>HTML</b> formatting.</p> 

--PHP-alt-<?php echo $random_hash; ?>-- 

--PHP-mixed-<?php echo $random_hash; ?>  
Content-Type: application/zip; name="attachment.zip"  
Content-Transfer-Encoding: base64  
Content-Disposition: attachment  

<?php echo $attachment; ?> 
--PHP-mixed-<?php echo $random_hash; ?>-- 

<?php 
//copy current buffer contents into $message variable and delete current output buffer 
$message = ob_get_clean(); 
//send the email 
$mail_sent = @mail( $to, $subject, $message, $headers ); 
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
echo $mail_sent ? "Mail sent" : "Mail failed"; 
?>
千纸鹤带着心事 2024-08-16 01:53:38

我查看了评论中的链接,并将一些内容清理到了函数中。一方面,我使用了参数和此处文档的关联数组,因为示例中 php 标签和输出缓冲的使用并不完全干净(或者不像 PHP 那样干净)。

http://aramk.com/php/php-sending-an-email- Attachment/

emailFile(array(
    'to' => '[email protected]',
    'from' => '[email protected]',
    'subject' => 'Some Subject',
    'message' => '<b>Hello!</b>',
    'plain ' => 'Get a new email client!',
    'file' => '/path/to/file'
));

您可以将文件路径从 $_FILES 传递到 "file" 参数中。

I've taken a look at the link in the comments and cleaned up a few things into a function. For one thing I've used an associative array of arguments and heredocs, since the use of php tags and output buffering in the example weren't exactly clean (or as clean as PHP will get).

http://aramk.com/php/php-sending-an-email-attachment/

emailFile(array(
    'to' => '[email protected]',
    'from' => '[email protected]',
    'subject' => 'Some Subject',
    'message' => '<b>Hello!</b>',
    'plain ' => 'Get a new email client!',
    'file' => '/path/to/file'
));

You can pass along the file path from $_FILES into the "file" argument.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文