【问题标题】:phpmailer with attachment is not working in cron job带有附件的phpmailer在cron作业中不起作用
【发布时间】:2014-03-11 19:43:49
【问题描述】:

我可以使用 cron 作业发送邮件但不能带附件我,我可以使用 cronjob 发送邮件但不能带附件...请我现在需要帮助.. 过去 2 年我对此感到震惊天。

代码:

<?php

    dirname(__FILE__);
    $data;
    $data1;
    $d1="localhost";
    $d2="username";
    $d3="password";
    mysql_connect($d1,$d2,$d3);
    $d4="database name";
    mysql_select_db($d4) or die("cannot connect db");
    $sql = "select * from members";
    $res = mysql_query($sql) or die("cannot select db");
    $count = mysql_num_fields($res);

    // fetch table header from database
    $header = "";
    for ($i = 0; $i < $count; $i++){
        $header .= mysql_field_name($res, $i);
    }

    // fetch data each row, store on tabular row data
    while($row = mysql_fetch_row($res)){
        $line = "";
        foreach($row as $value){
            if(!isset($value) || $value == ""){
                $value = "\t";
            }else{
                $value = str_replace("", "", $value);
                $value = "" . $value . "" ;
            }
            $line .= $value;
        }
        $data1 .= trim($line)."\n";
        $data = str_replace("\r", "", $data1);
    }

    $name=date("d-m-y")."-list.xls";
    $ran=rand(1,1000);
    $d5="exportfile";
    $ourFileName =$d5;
    $d6=".xls";
    $et=$d6;

    if(file_exists($ourFileName.$et))
        file_put_contents($ourFileName.$ran.$et, $header."\n".$data);

    $file=$ourFileName.$ran.$et;
    require("class.phpmailer.php");
    require("class.smtp.php");
    require("/home/freetech/public_html/akw/PHPMailer-master/PHPMailerAutoload.php");
    $mail = new PHPMailer();
    $mail->IsSMTP();  // telling the class to use SMTP
    $mail->SMTPAuth = true;
    $us="username";    
    $pswd="password";
    $hst="server link";
    $frm="akw@hostname.com";                           // Enable SMTP authentication
    $mail->Username = $us;                            // SMTP username
    $mail->Password = $pswd; 
    $mail->SMTPSecure = 'ssl';
    $mail->Host     = $hst; // SMTP server
    $mail->Port     =465;
    $mail->From     = $frm;

    $mail->AddAddress("email address");

    $mail->Subject  = "First PHPMailer Message";
    $mail->Body     = "Hi! \n\n This is my first e-mail.";
    $mail->AddAttachment("/home/freetech/public_html/akw/".$file);      // attachment
    $mail->WordWrap = 50;
    $mail->Send();
?>

【问题讨论】:

  • 附件位置是否正确?它有读取权限吗?这可能有用:stackoverflow.com/questions/15064619/…
  • 是的,我给予了所有许可,附件也位于正确的位置,但这并没有响起!
  • 欢迎来到本站!你有大量的死代码和无意义的变量名,所以很难分析你的问题。例如,前三行根本不做任何事情。我建议你去阅读一些基础教程,给你的变量起有意义的名字,然后再回来。
  • @user3304531,由哪个用户运行 cron 作业??
  • 是的,附件被授予 755 权限...主要问题是我无法在使用 cronjob 调度时使用 phpmailer 发送任何邮件...但是当我使用浏览器方法发送它时...脚本运行良好。

标签: php linux cron phpmailer


【解决方案1】:

cronjob 和 apache 用户可能不同。因此他们不能发送彼此的文件或使用他们的类。

如果附加的文件需要由 apache 和 cronjob 发送,请确保 cronjob 是为有权使用该文件或类的用户提供的。

检查以查看您用于保存附件文件的目录的所有者和权限。此外,检查任何必需的类。

ll -a /home/freetech/public_html/

akw 目录列出了什么?

然后查看哪个用户正在运行 cronjob。在命令行上以 root 身份尝试:

for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done

如果不是root,则一次尝试一个用户:

crontab -u apache -l
crontab -u freetech -l

如果 cronjob 在 freetech 中,则查找您所在的组:

groups freetech
id -Gn freetech

然后更改该 akw 目录上的组以匹配:

cd /home/freetech/public_html/
chown apache:freetech akw
chmod 774 akw

至于让你的代码看起来不错……一个用phpmailer发送附件的例子:

Example 1/Example 2

【讨论】:

  • 非常感谢您的回答...但我的问题不仅在于attCHMENTS ..还有使用phpmailer的没有附件的普通邮件。如前所述,使用phpmailer发送邮件时会出现同样的问题使用 cron 作业...普通邮件的示例代码
  • 我会假设 class.phpmailer.php 和 class.smtp.php 在同一个 akw 目录中?然后尝试完整的路径名。并确保 cronjob 用户拥有他们的权限。
【解决方案2】:

配置您的 cron 以作为 www-data 运行。由于您从 www-data 发送邮件,它应该也适用于 cron。

在您的 cron 中尝试 sudo -u www-data php index.php。将 index.php 替换为您尝试运行的脚本。

PS:这实际上是一个 hack。您需要使用文件权限并提出一个强大的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2015-02-23
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多