我正在开发我的第一个PHP项目,而且进展顺利。到目前为止,我已经能够弄清楚如何做到我需要的大部分内容,但现在对我来说有一个很大的问题:电子邮件。
我在共享服务器上,所以我无法安装PEAR,我无法修改我的php.ini。根据我的主机非常有限的文档,我必须使用SMTP,所以我不能(纠正我,如果我错了)使用mail()函数。那么有人有什么建议吗?此时我只想发送基本文本消息,那么我在哪里指定我的SMTP端口号,用户,密码等?感谢
答案 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应用引擎的电子邮件服务(它不是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 强>
x@y.com
7befe053cf52caba05ad2be3c25c340af7732564
<path to your folder>
。appcfg.py update <path to your folder>
测试应用的最后一步。
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 );
}