2011-02-11 44 views
2

我目前正試圖讓通過PHP郵件功能發送的郵件中的鏈接工作。這裏是我的代碼 - 我還包含了一些事情我已經嘗試過(與音符一起註釋掉):奇怪的行爲與PHP郵件功能中的鏈接

$to = "[email protected]";

$subject = "Testing email"; 

//$body = '<strong>This is strong text</strong>';   <-- Works 
//and the text is correctly emphasised. 

//$body = '<a href="www.yahoo.com">Link Test</a>';   <-- Works 
//but without http:// at the start makes the link relative to the server root 

//$body = "<a href='http://www.yahoo.com'>Link Test</a>"; <-- Does not work 

//$body = "<a href=\"http://www.yahoo.com\">Link Test</a>"; <-- Does not work 

$body = '<a href="http://www.yahoo.com">Link Test</a>'; //<-- Does not work 

$headers =   "MIME-Version: 1.0\r\n"; 
$headers .=   "Content-type: text/html; charset=iso-8859-1\r\n"; 
$headers .=   "From: Steven Parler <". $to . ">\r\n"; 
$headers .=   "X-Mailer: PHP/".phpversion() . "\r\n"; 

if (mail($to, $subject, $body, $headers)) { 
    echo("<p>Message successfully sent!</p>"); 
    } else { 
    echo("<p>Message delivery failed...</p>"); 
} 

可以看出HTML工作沒有鏈接,鏈接也提供工作,我不在鏈接本身中不包含「http://」。如果我確實包含了「http://」,那麼根本就沒有收到/發送郵件(我不確定哪個郵件()命令返回true表示它已發送)。

我不確定爲什麼這不起作用。它可能是一些設置,需要改變我的虛擬主機的服務器?我在Windows共享主機上。

在此先感謝任何人可以給我的建議 - 一直把我的頭髮拉出這個哈哈。 :)

+0

它是做什麼的?你根本沒有收到信息嗎? – Cfreak 2011-02-11 22:14:15

+0

對不起,我應該更具體。是的 - 在那些被標記爲「不工作」的郵件中根本沒有收到郵件。 – Steven 2011-02-11 22:17:48

+1

鏈接如何工作,如果他們工作的話,由*客戶端*而不是發送郵件的服務器決定。 – Maerlyn 2011-02-11 22:17:56

回答

3

不要手動構建MIME消息。這太痛苦和脆弱了。使用類似PHPMailerSwiftMailer的東西自動爲你做。你只需要提供HTML,他們會提供相應的頭文件

1

我@Marc B.完全一致

這裏有一對夫婦更多的選擇:XPertMailerZend_MailRmailHTML MIME MAIL

我工作與所有這些,但因爲我主要與Zend框架工作,我最近使用Zend_Mail。

話雖如此,您的託管服務提供商可能會阻止您的電子郵件,因爲他們可能認爲它是垃圾郵件。嘗試生成有效的HTML標記passes validation,看看是否有幫助。

0

這是非常奇怪的行爲,我希望最後2個工作完美。我在我的服務器上試過了,mail($email, $subject, $body, $headers);$body

text text text: \n http://website.com完美配合。

也許這是一個設置的地方?如果您使用的是獎勵空間,則需要使用來自標題的頭信息,以及從註冊的電子郵件發送的郵件。其他主機可能有類似的過程。

0

感謝您的回覆。我終於通過使用Swiftmailer的SMTP功能解決了這個問題,該功能正確地創建了包含鏈接的電子郵件。

出於興趣我嘗試了我在原始帖子中使用的代碼......但這次我使用了一個隨機網址(http://www.trustedreviews.com)。電子郵件到達...然後我嘗試了很多其他網址 - google.com,hotmail,yahoo.co.uk等,他們都到了。把它改回(http://www.yahoo.com),並且看到這個消息沒有再次到達。因此,似乎在數百萬的網址中有我選擇了一個我的虛擬主機已決定阻止大聲笑...

這就是說,雅虎鏈接確實使用郵件的smtp函數到達確定;它只是與PHP郵件功能,它似乎並沒有工作。我想我會聯繫他們,問他們爲什麼被封鎖。我很可能會堅持使用smtp方法,至少它似乎繞過了任何限制。

再次感謝大家的時間和幫助:)