Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用php发送电子邮件,附带从数据库生成的文件_Php_Email_Email Attachments_Vcf Vcard - Fatal编程技术网

用php发送电子邮件,附带从数据库生成的文件

用php发送电子邮件,附带从数据库生成的文件,php,email,email-attachments,vcf-vcard,Php,Email,Email Attachments,Vcf Vcard,我有一个简单的脚本,用于发送用户上传的带有附件的电子邮件。如何修改脚本,使其通过电子邮件发送用php生成的文件(例如,在本例中,我希望从数据库中提取联系人信息,生成文件的vCard,并将其附加到电子邮件中) ViewCompany.php <?php // this auto-magically inserts header.html here require('header.html'); include('mail.php'); if(isset($_POST['name']

我有一个简单的脚本,用于发送用户上传的带有附件的电子邮件。如何修改脚本,使其通过电子邮件发送用php生成的文件(例如,在本例中,我希望从数据库中提取联系人信息,生成文件的vCard,并将其附加到电子邮件中)

ViewCompany.php

<?php
// this auto-magically inserts header.html here
require('header.html');  


include('mail.php');

if(isset($_POST['name'], $_FILES['file'])){

    $body = array(

        "From: {$_POST['name']}",

        "Details:",
        "Name: {$_FILES['file']['name']}",
        "Size: {$_FILES['file']['size']}",
        "Type: {$_FILES['file']['type']}"

    );


    mail_file('receiver@email.com','sender@email.com','subject', implode("\r\n", $body), $_FILES['file']);

}
?>
生成vcard,但当我这样做时,电子邮件不会发送

有什么建议吗

谢谢,

坎普苏1988


这是我的getVcard.php文件:

<?php
include "connection.php";
$CompanyID = $_GET['CompanyID'];
$CompanyID=$_GET['CompanyID']; // Collecting data from query string
if(!is_numeric($CompanyID)){ // Checking data it is a number or not
    echo "Data Error"; 
exit;
}
$query = "SELECT * FROM company where CompanyID = $CompanyID";
$result = mysql_query($query) or die(mysql_error());
header('Content-Type: text/vcard');
header('Content-Disposition: attachment; filename=vcardexport.vcf');
        while($ResultsLists = mysql_fetch_array($result)){  
echo                "BEGIN:VCARD\n";
echo                "VERSION:4.0\n";
echo                "KIND:org\n";
echo                "FN:" . $ResultsLists['CompanyName'] . "\n";
echo                "ORG:" . $ResultsLists['CompanyName'] . "\n";
echo                "ADR;TYPE=work;LABEL=\"". $ResultsLists['CompanyAddress1'] . "\n" . $ResultsLists['CompanyAddress2'] . "\n". $ResultsLists['CompanyCity'] . "\, " . $ResultsLists['CompanyState'] . " " . $ResultsLists['CompanyZipcode'] . "\n" . $ResultsLists['CompanyCountry'] . "\":" .  $ResultsLists['CompanyAddress2'] . ";" . $ResultsLists['CompanyAddress1'] . ";" . $ResultsLists['CompanyCity'] . ";" . $ResultsLists['CompanyState'] . ";" . $ResultsLists['CompanyZipcode'] . ";" . $ResultsLists['CompanyCountry'] . "\n";
                if($ResultsLists['CompanyPhone'] != ""){
echo                    "TEL;TYPE=\"work,voice\";VALUE=uri:tel:" . $ResultsLists['CompanyPhone'] . "\n";
                }
                if($ResultsLists['CompanyEmail'] != ""){
echo                    "WORK.EMAIL:" . $ResultsLists['CompanyEmail'] . "\n";
                }
echo                "WORK.LANG;PREF=1:en\n";
                if($ResultsLists['CompanyNotes'] != ""){
echo                    "NOTE:" . $ResultsLists['CompanyNotes'] . "\n";
                }
                if($ResultsLists['CompanyWebsite'] != ""){
echo                    "URL:" . $ResultsLists['CompanyWebsite'] . "\n";
                }
echo                "END:VCARD";
?>



更新:是否可以将vcf文件保存到临时位置,然后自动将临时文件附加到电子邮件(在附加到电子邮件之前重命名临时文件)

最简单的解决方案是手动传递vcard的数据:

$file = array(
              'type' => 'text/plain',
              'name' => 'vcard.txt',
              'tmp_name' => 'http://yourdomain/getVcard.php?CompanyID=' . $CompanyID
        );

但这是一个非常糟糕的解决方案。从长远来看,最好使用像这样的类。

我无法让您的建议生效,我没有收到错误,但电子邮件没有发出。我尝试查看phpmailer,但不确定如何设置它。我正在使用XAMPP和它附带的Mercury Mail,并将Mercury Mail设置为发送t通过gmail SMTPhm发送电子邮件,此代码应该有效。电子邮件是否发送?记住在邮件函数中定义$file,否则它将使用其他值//您可以直接在phpmailer中定义smtp数据。但是我理解这是否太难做到。无论如何,您应该熟悉它或类似的类。我没有收到任何电子邮件。我将编辑我的原始消息,以发布生成vcard的成本。我尝试将类型更改为text/vcard,将文件更改为vcard.vcf,但这也不起作用。我承认,对于php,我仍然是一个初学者,我以前从未尝试过发送电子邮件,并使用了一个教程来设置Mercury,以及一个用于电子邮件脚本。
echo            "<label for='file'>File</label>";
echo            "<input type='file' name='file' id='file'>";
$file = "getVcard.php?CompanyID=" . $CompanyID;
<?php
include "connection.php";
$CompanyID = $_GET['CompanyID'];
$CompanyID=$_GET['CompanyID']; // Collecting data from query string
if(!is_numeric($CompanyID)){ // Checking data it is a number or not
    echo "Data Error"; 
exit;
}
$query = "SELECT * FROM company where CompanyID = $CompanyID";
$result = mysql_query($query) or die(mysql_error());
header('Content-Type: text/vcard');
header('Content-Disposition: attachment; filename=vcardexport.vcf');
        while($ResultsLists = mysql_fetch_array($result)){  
echo                "BEGIN:VCARD\n";
echo                "VERSION:4.0\n";
echo                "KIND:org\n";
echo                "FN:" . $ResultsLists['CompanyName'] . "\n";
echo                "ORG:" . $ResultsLists['CompanyName'] . "\n";
echo                "ADR;TYPE=work;LABEL=\"". $ResultsLists['CompanyAddress1'] . "\n" . $ResultsLists['CompanyAddress2'] . "\n". $ResultsLists['CompanyCity'] . "\, " . $ResultsLists['CompanyState'] . " " . $ResultsLists['CompanyZipcode'] . "\n" . $ResultsLists['CompanyCountry'] . "\":" .  $ResultsLists['CompanyAddress2'] . ";" . $ResultsLists['CompanyAddress1'] . ";" . $ResultsLists['CompanyCity'] . ";" . $ResultsLists['CompanyState'] . ";" . $ResultsLists['CompanyZipcode'] . ";" . $ResultsLists['CompanyCountry'] . "\n";
                if($ResultsLists['CompanyPhone'] != ""){
echo                    "TEL;TYPE=\"work,voice\";VALUE=uri:tel:" . $ResultsLists['CompanyPhone'] . "\n";
                }
                if($ResultsLists['CompanyEmail'] != ""){
echo                    "WORK.EMAIL:" . $ResultsLists['CompanyEmail'] . "\n";
                }
echo                "WORK.LANG;PREF=1:en\n";
                if($ResultsLists['CompanyNotes'] != ""){
echo                    "NOTE:" . $ResultsLists['CompanyNotes'] . "\n";
                }
                if($ResultsLists['CompanyWebsite'] != ""){
echo                    "URL:" . $ResultsLists['CompanyWebsite'] . "\n";
                }
echo                "END:VCARD";
?>
$file = array(
              'type' => 'text/plain',
              'name' => 'vcard.txt',
              'tmp_name' => 'http://yourdomain/getVcard.php?CompanyID=' . $CompanyID
        );