2014-02-13 54 views
0

我能夠發送郵件,但沒有附件使用cron作業我可以發送郵件,但沒有使用cronjob附件...請我現在需要幫助。我在過去的兩天裏感到很震驚。phpmailer與附件不工作在cron作業

代碼:

<?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="[email protected]";       // 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(); 
?> 
+0

附件是否位於正確位置?它是否具有讀取權限? 這可能是有用的:http://stackoverflow.com/questions/15064619/php-send-email-with-attachment –

+0

是的,我給了每一個許可和附件也在適當的位置,但不響鐘!! – user3304531

+1

歡迎來到本網站!這裏有大量的死代碼和無意義的變量名,所以很難分析你的問題。例如,前三行完全沒有做任何事情。我建議你去讀一些基本的教程,並給你的變量有意義的名字,然後回來。 –

回答

2

的的cronjob和apache的用戶可以是不同的。因此他們不能發送彼此的文件或使用他們的類。

如果要連接的文件需要由apache和cronjob發送,請確保cronjob是有權使用該文件或類的用戶。

檢查以查看您用於保存附件文件的目錄的所有者和權限。另外,請檢查所有必需的類。

ll -a /home/freetech/public_html/ 

akw目錄中列出了什麼?

然後檢查以查看哪個用戶正在運行cronjob。在命令行中嘗試以此爲根:

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

如果沒有根,然後嘗試一個用戶時間:

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

+0

非常感謝你的回答...但我的問題不僅是與attCHMENTS ..但也沒有使用phpmailer.as前面提到的正常的郵件附件同樣的問題出現時,使用phpMail的郵件發送與cron作業...正常郵件的示例代碼 – user3304531

+0

我將假設class.phpmailer.php和class.smtp .php在同一個akw目錄中?然後嘗試完整的路徑名稱。並確保cronjob用戶有權使用它們。 – arikin

0

配置您的cron爲www數據運行。由於您從www數據發送郵件的工作,它也應該與cron一起正常工作。

在您的cron中嘗試sudo -u www-data php index.php。將index.php替換爲您嘗試運行的腳本。 PS:這其實是一種黑客。您需要充分利用文件權限,並提出一個強大的解決方案。