2013-06-01 39 views
1

我想通過郵件發送一個數組的內容,我已經嘗試了print_r方法,但是並不真正喜歡它在郵件中格式化的方式,所以我嘗試了內爆,但是目前它沒有實際發送的內容,而只是「陣列陣列陣列」PHP發送數組與郵件()

這是我的代碼:

<?php 
$con = mysqli_connect("localhost", "user","pw", "db"); 
if (!$con) 
{ 
die('Could not connect: ' . mysqli_error($con)); 
} 

$recipient_email = "[email protected]"; 

$result= mysqli_query($con, "SELECT * FROM subscribers WHERE datetime_registered >=  DATE_SUB(NOW(), INTERVAL 9 DAY)")or die(mysqli_error($con)); 
$subscribers = array(); 
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){ 

    $subscribers[] = array(
    "uid" => $row['id'], 
    "name" => $row['name'], 
    "email" => $row['email'], 
    "ip" => $row['ip'], 
    "date_registered" => $row['datetime_registered'] 
    ); 


} 


$headers = 'MIME-Version: 1.0' . "\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n"; 
$headers .= 'From: '.$recipient_email.''."\n"; 

$subject = "Subject"; 
$recipient = $recipient_email; 
$content = implode("\n", $subscribers); 
mail($recipient, $subject, $content, $headers); 
?> 

有誰知道是怎麼回事了?

回答

0

$headers變量之前,使用此代碼:

$newSubscribers = array(); 
foreach($subscribers as $data) 
{ 
    $newSubscribers[] = implode(', ', $data); 
} 

$newSubscribers = implode("<br>\n", $newSubscribers); 
$subscribers = $newSubscribers; 

所以你的最終代碼應該是這樣的:

... 
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){ 

$subscribers[] = array(
"uid" => $row['id'], 
"name" => $row['name'], 
"email" => $row['email'], 
"ip" => $row['ip'], 
"date_registered" => $row['datetime_registered'] 
); 


} 

$newSubscribers = array(); 
foreach($subscribers as $data) 
{ 
    $newSubscribers[] = implode(', ', $data); 
} 

$newSubscribers = implode("\n<br>", $newSubscribers); 
$subscribers = $newSubscribers; 


$headers = 'MIME-Version: 1.0' . "\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n"; 
$headers .= 'From: '.$recipient_email.''."\n"; 
+0

菲爾這是偉大的感謝,但它實際上並沒有把它放在一個新行,我怎麼才能到每個用戶的之間的新線電子郵件? – Jamie000012

+0

用'「
」'替換'「\ n」'。我已更新我的代碼 –

+0

謝謝Phil Cross – Jamie000012

1

這是因爲implode功能只爆頂層陣列是$subscribers。這不是下一個級別的數組數據。

你可以試試這個:

foreach($subscribers as $subscriber_data){ 
    $dataset[] = implode(', ', $subscriber_data); 
} 

$content = implode("\n", $dataset); 
mail($recipient, $subject, $content, $headers); 
0

它不工作,只要你願意的原因是破滅()不具有關聯數組工作,你認爲它會的方式。我建議:

$subscribers[] = array(
"uid: {$row['id']}", 
"name: {$row['name']}", 
... 
); 

然後,當你分析這個數組破滅,以新行作爲分隔符,你會看到

"uid: someid 
name: somename 
.... 
" 

我以爲是你要的東西。乾杯!

0

這是非常好的,你發送陣列在密鑰值對中,而不是僅發送值。

使用以下腳本將其轉換並通過電子郵件發送。

$data = ''; 
foreach ($subscribers as $key=>$value){ 
    $data .= $key.'-------'.$value; 
    $data.= "\n"; 
} 

通過PHP的郵件功能發送..

$headers = 'MIME-Version: 1.0' . "\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n"; 
$headers .= 'From: '.$recipient_email.''."\n"; 

$subject = "Subject"; 
$recipient = $recipient_email; 
$content = $data; 
mail($recipient, $subject, $content, $headers);