【问题标题】:Send the download link of the uploaded file in a mail在邮件中发送上传文件的下载链接
【发布时间】:2012-10-03 20:35:12
【问题描述】:

我在我的网站中使用“jquery file upload plugin”。 该插件为我提供了上传文件后下载文件的功能,这是代码

<td class="download">
                <a href="{%=file.url%}" class="btn modal-download" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">
                <i class="icon-download"></i>
                Download</a>
            </td>

现在,我需要让用户可以使用上传文件的下载网址发送电子邮件,所以我使用fancy contact form通过每个上传文件发送电子邮件,这是代码

<td class="mail">
                <div id="form-container">
    <h1>Fancy Contact Form</h1>
    <h2>Drop us a line and we will get back to you</h2>

    <form id="contact-form" name="contact-form" method="post" action="fancymail/submit.php">
      <table width="100%" border="0" cellspacing="0" cellpadding="5">
        <tr>
          <td width="15%"><label for="name">Name</label></td>
          <td width="70%"><input type="text" class="validate[required,custom[onlyLetter]]" name="name" id="name" value="<?=$_SESSION['post']['name']?>" /></td>
          <td width="15%" id="errOffset">&nbsp;</td>
        </tr>
        <tr>
          <td><label for="email">Email</label></td>
          <td><input type="text" class="validate[required,custom[email]]" name="email" id="email" value="<?=$_SESSION['post']['email']?>" /></td>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td><label for="subject">Subject</label></td>
          <td width="70%"><input type="text" class="validate[required,custom[onlyLetter]]" name="subject" id="subject" value="<?=$_SESSION['post']['subject']?>" /></td>
          <!--<td><select name="subject" id="subject">
            <option value="" selected="selected"> - Choose -</option>
            <option value="Question">Question</option>
            <option value="Business proposal">Business proposal</option>
            <option value="Advertisement">Advertising</option>
            <option value="Complaint">Complaint</option>
          </select>          </td>-->
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td valign="top"><label for="message">Message</label></td>
          <td><textarea name="message" id="message" class="validate[required]" cols="35" rows="5"><?=$_SESSION['post']['message'] ?></textarea></td>
          <!--efoula-->

          <!--efoula-->
          <td valign="top">&nbsp;</td>
        </tr>
        <tr>
          <td><label for="captcha"><?=$_SESSION['n1']?> + <?=$_SESSION['n2']?> =</label></td>
          <td><input type="text" class="validate[required,custom[onlyNumber]]" name="captcha" id="captcha" /></td>
          <td valign="top">&nbsp;</td>
        </tr>
        <tr>
          <td valign="top">&nbsp;</td>
          <td colspan="2"><input type="submit" name="button" id="button" value="Submit" />
          <input type="reset" name="button2" id="button2" value="Reset" />

          <?=$str?>          <img id="loading" src="img/ajax-load.gif" width="16" height="16" alt="loading" /></td>
        </tr>
      </table>
      </form>
      <?=$success?>
    </div>
            </td>

还有使用 submit.php 文件发送邮件的精美联系表单,代码如下

<?php

/* config start */

$emailAddress = 'email@example.com';

/* config end */
$url = "http://domain.com/files=" .$file_name ;


require "phpmailer/class.phpmailer.php";
require "../server/php/upload.class.php";

session_name("fancyform");
session_start();


foreach($_POST as $k=>$v)
{
    if(ini_get('magic_quotes_gpc'))
    $_POST[$k]=stripslashes($_POST[$k]);

    $_POST[$k]=htmlspecialchars(strip_tags($_POST[$k]));
}


$err = array();

if(!checkLen('name'))
    $err[]='The name field is too short or empty!';

if(!checkLen('email'))
    $err[]='The email field is too short or empty!';
else if(!checkEmail($_POST['email']))
    $err[]='Your email is not valid!';

if(!checkLen('subject'))
    $err[]='You have not selected a subject!';

if(!checkLen('message'))
    $err[]='The message field is too short or empty!';

if((int)$_POST['captcha'] != $_SESSION['expect'])
    $err[]='The captcha code is wrong!';


if(count($err))
{
    if($_POST['ajax'])
    {
        echo '-1';
    }

    else if($_SERVER['HTTP_REFERER'])
    {
        $_SESSION['errStr'] = implode('<br />',$err);
        $_SESSION['post']=$_POST;

        header('Location: '.$_SERVER['HTTP_REFERER']);
    }

    exit;
}


$msg=
'Name:  '.$_POST['name'].'<br />
Email:  '.$_POST['email'].'<br />
Download: '.$url.'<br />


Message:<br /><br />

'.nl2br($_POST['message']).'

';


$mail = new PHPMailer();
$mail->IsMail();

$mail->AddReplyTo($_POST['email'], $_POST['name']);
$mail->AddAddress($emailAddress);
$mail->SetFrom($_POST['email'], $_POST['name']);
$mail->Subject = "A new ".mb_strtolower($_POST['subject'])." from ".$_POST['name']." | contact form feedback";

$mail->MsgHTML($msg);

$mail->Send();


unset($_SESSION['post']);

if($_POST['ajax'])
{
    echo '1';
}
else
{
    $_SESSION['sent']=1;

    if($_SERVER['HTTP_REFERER'])
        header('Location: '.$_SERVER['HTTP_REFERER']);

    exit;
}

function checkLen($str,$len=2)
{
    return isset($_POST[$str]) && mb_strlen(strip_tags($_POST[$str]),"utf-8") > $len;
}

function checkEmail($str)
{
    return preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $str);
}

?>

我现在正在尝试在邮件的消息中发布上传文件的下载网址, 我尝试将它添加到 ($msg= Download: '.$url.') 中,并设置了 ($url = "http://domain.com/files=" .$file_name ; ),但是当我收到我刚收到的邮件(下载:/file="不带文件名")。

我需要在邮件中发布上传文件的完整网址。 任何帮助???

【问题讨论】:

  • 什么是$file_path?它是在任何地方定义的吗?

标签: php javascript jquery ajax


【解决方案1】:

在 submit.php $url = "http://exemple.com/files=" .$file_name ;

$file_name未定义;您还需要从表单中发布这些数据。

回答第 1 部分:File.URL 未传递,或显示给用户

假设&lt;td class="download"&gt;&lt;td class="mail"&gt; 中的表单在同一页面中

在表单中添加要使用的值并隐藏输入

 <input type="hidden" name="url" value="{%=file.url%}" />

在 submit.php 中修改

Download: '.$url.'&lt;br /&gt;

Download: '.$_POST['url'].'&lt;br /&gt;

您的问题是您没有在表单中发布相关的{%=file.url%} 数据。

回答第 2 部分:$emailAddress = 'email@example.com';

$emailAddress 被分配了字符串“email@example.com” 用 $_POST['email'] 覆盖 $emailAddress 的值。 (在本例中,我覆盖了 $url 的值并创建了一个变量 $usrname 并为它们分配了 $_POST 等效项)

替换

$msg=
'Name:  '.$_POST['name'].'<br />
Email:  '.$_POST['email'].'<br />
Download: '.$url.'<br />


Message:<br /><br />

'.nl2br($_POST['message']).'

';

有了这个

$usrname = $_POST['name'];
$emailAddress = $_POST['email'];
$url = $_POST['url'];

$msg=
'Name:  '.$usrname.'<br />
Email:  '.$emailAddress.'<br />
Download: '.$url.'<br />


Message:<br /><br />

'.nl2br($_POST['message']).'

';

【讨论】:

  • 真的很感激,你解决了我的问题。 “谢谢你” :D :D :D
  • 好的,如果您不介意,我还有一个问题,我需要授予用户从他们的电子邮件地址发送此邮件的权限,因为我需要替换 ($emailAddress = 'email@ example.com';) 与用户电子邮件???你能帮忙吗?
  • 我将完善我的答案以回答您问题的第二部分,请在您的原始问题中添加第二个问题。
  • 我做到了....谢谢你的及时回复,我终于用用户地址更改了($emailAddress)。再次感谢“你让我开心”。
【解决方案2】:

最好检查你使用的变量是否存在,例如:

$url = isset($file_name) ? 'http://domain.com/files=' .$file_name : 'http://domain.com/files=no_img';

如果您在 URL 中获得“no_img”,则变量 $file_name 不存在。也许它是在另一个 php 文件中定义的,您应该将它包含在该脚本中。

【讨论】:

  • 感谢您的帮助。我在 URL 中得到“no_img”。那么,如何在(submit.php)中存在($file_name),我刚刚需要(require“../server/php/upload.class.php”;),这足够还是我必须做另一件事. “对不起,我只是 php 的初学者:D”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多