初学者PHP电子邮件问题

时间:2010-04-02 17:09:44

标签: php email

我正在开发我的第一个PHP项目,而且进展顺利。到目前为止,我已经能够弄清楚如何做到我需要的大部分内容,但现在对我来说有一个很大的问题:电子邮件。

我在共享服务器上,所以我无法安装PEAR,我无法修改我的php.ini。根据我的主机非常有限的文档,我必须使用SMTP,所以我不能(纠正我,如果我错了)使用mail()函数。那么有人有什么建议吗?此时我只想发送基本文本消息,那么我在哪里指定我的SMTP端口号,用户,密码等?感谢

6 个答案:

答案 0 :(得分:3)

即使您无法在系统级别安装PEAR组件,您仍然可以下载一些,并将它们捆绑到您的应用程序中,正确设置include_path,以便它包含您放置这些组件的目录 - 请参阅set_include_path(),关于此事。


此外,还有其他非PEAR组件,可能对您有用;例如,我听说 Swift Mailer 很棒。

似乎它至少有一些documentation - 包括以下几页,在您的情况下可能会有用:

答案 1 :(得分:2)

您的提供商已经为mail()命令配置了使用正确的SMTP服务器的可能性。提供商通常会这样做。我会先尝试一下。

如果它确实不起作用,请使用像phpMailer这样的邮件程序类。有了它,您可以指定要使用的确切SMTP服务器。

答案 2 :(得分:1)

不妨尝试一下,特别是如果文档有限 - 它可能很容易变得不准确或过时。


// The message
$message = "Line 1\nLine 2\nLine 3";

// Send
mail('caffeinated@example.com', 'My Subject', $message);

另外,即使你不能使用php.ini,你有时也可以使用ini_set()自己设置一些东西。

答案 3 :(得分:1)

非常基本的代码只是为了向您展示一个想法。虽然工作

function smtp($recipient,$subject,$content) {

  $smtp_server = "mail.com"; 
  $port = 25; 
  $mydomain = "mydomain.com"; 
  $username = "me@mail.com"; 
  $password = "xxxyyy"; 
  $sender = $username; 

  $handle = fsockopen($smtp_server,$port); 
  fputs($handle, "EHLO $mydomain\r\n"); 

  // SMTP authorization 
  fputs($handle, "AUTH LOGIN\r\n"); 
  fputs($handle, base64_encode($username)."\r\n"); 
  fputs($handle, base64_encode($password)."\r\n"); 

  // Send out the e-mail 
  fputs($handle, "MAIL FROM:<$sender>\r\n"); 
  fputs($handle, "RCPT TO:<$recipient>\r\n"); 
  fputs($handle, "DATA\r\n"); 
  fputs($handle, "To: $recipient\r\n"); 
  fputs($handle, "Subject: $subject\r\n\r\n"); 
  fputs($handle, "$content\r\n"); 
  fputs($handle, ".\r\n"); 

  // Close connection to SMTP server 
  fputs($handle, "QUIT\r\n"); 
}

答案 4 :(得分:1)

Google App Engine

也许您可以试用Google应用引擎的电子邮件服务(它不是PHP解决方案,但这可以很好地扩展并且很便宜)。您可以每天免费向2,000位收件人(8位收件人/分钟)发送电子邮件。之后,您只需为每位收件人支付0.0001美元(每分钟5,100名收件人)。我觉得这很便宜而且效果很好。

电子邮件服务

我开发了一个真正简单的邮件服务。您只需将(发布数据)卷曲到您的应用引擎域即可。

谷歌应用引擎的快速介绍

如果您对此解决方案感兴趣,请参阅Brett Stalkin的快速视频介绍,解释如何在10分钟内使用python's app engine sdk创建简单的留言簿。我认为这非常了不起。

代码

<强>的app.yaml

application: nameofmyapplication #name of your application
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: myemail.py

<强> myemail.py

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import mail

#config
sender = "x@y.com" # Your admin email adres.
secret = "/7befe053cf52caba05ad2be3c25c340af7732564" # needs leading /

class Email:
    @classmethod 
    def email(self, to, subject, body):
        message = mail.EmailMessage()
        message.sender = sender
        message.subject = subject
        message.to = to
        message.body = body
        message.send()

class MainPage(webapp.RequestHandler):
    def post(self):
        if not sender:
            self.response.out.write("Please configure sender.")
            pass

        to = self.request.get("to")
        subject = self.request.get("subject")
        body = self.request.get("body")

        if not mail.is_email_valid(to):
            self.response.out.write("to param is invalid email address.")
            pass
        if not subject:
            self.response.out.write("subject param is invalid.")
            pass
        if not body:
            self.response.out.write("body param is invalid")
            pass

        Email.email(to, subject, body)
        self.response.out.write("Message sent.")

application = webapp.WSGIApplication(
                                     [(secret, MainPage)],
                                     debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

配置应用程序

例如,您有以下配置。

<强>的app.yaml

  • 申请 nameofmyapplication # name of your application

<强> myemail.py

  • 发件人:指向为app引擎指定的管理员电子邮件地址。例如x@y.com
  • secret:要将数据发布到的秘密网址。例如:7befe053cf52caba05ad2be3c25c340af7732564

将应用程序上传到app引擎

  1. 将所有代码放在目录<path to your folder>
  2. 使用appcfg.py update <path to your folder>
  3. 上传代码
  4. 如果成功,您可以在线访问您的应用。
  5. 使用curl发送电子邮件

    测试应用的最后一步。

    curl -d "to=<your@email.com>&body=<Hello World!>&subject=<Testing app engine>" http://<nameofyourapplication>.appspot.com/<7befe053cf52caba05ad2be3c25c340af7732564>
    

    <>之间你必须指明自己的论点,当然要省略<>。如果成功,服务器应该回复Message sent.

答案 5 :(得分:0)

// ini_set("sendmail_from","webmaster@server.com"); // Only use if you have to.
ini_set("SMTP","mail.server.com");

$to = 'email@domain.com';
$subject = "Subject";
$body = "Body Content";
$headers = 'From: no_reply@domain.com' . "\r\n";
$result = @mail ( $to, $subject, $body, $headers );
if (! $result) {
    $errors = error_get_last ();

    $error = "";
    foreach ( $errors as $k => $v ) {
        $error .= "\n{$k} = {$v}";
    }
    error_log ( $error );
}

PHP: mail