2011-02-11 131 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方法,至少它似乎绕过了任何限制。

再次感谢大家的时间和帮助:)