Yeni Başlayanlar PHP e-posta sorunu

6 Cevap php

Benim ilk PHP proje üzerinde çalışıyorum ve çok iyi gidiyor. Ben bugüne kadar ne gerek çoğu nasıl anlamaya mümkün oldum, ama büyük bir sorun benim için var: E-posta.

Ben paylaşılan bir sunucuda değilim, bu yüzden PEAR yükleyemez, ve benim php.ini değiştirmek olamaz. Benim konağın çok sınırlı belgelerine göre, Ben bu yüzden (Yanılıyorsam beni düzeltin) mail () işlevi kullanamazsınız SMTP kullanmak zorunda. Yani herkes ne herhangi bir öneriniz var mı? Bu noktada ben sadece basit bir kısa mesaj göndermek istiyorum, bu yüzden nerede yüzden benim SMTP port numarası, kullanıcı, şifre ve belirtmek istiyorsunuz? Teşekkürler

6 Cevap

Şansı bu doğru SMTP sunucusu kullanır için sağlayıcı zaten mail() komutu yapılandırılmış olduğunu vardır. Sağlayıcıları genellikle bunu. Ben önce o denemek istiyorsunuz.

Gerçekten bu şekilde işe yaramazsa, phpMailer gibi mailler sınıfını kullanın. Bunun üzerine, tam SMTP sunucusu kullanmak için belirleyebilirsiniz.

Eğer sistem düzeyinde ARMUT bileşenleri yüklemek edemez bile, hala düzgün include_path so it contains the directory in which you've put those components -- see set_include_path() , bu konuda ayarlarken, onları uygulamada bazı indirmek, ve bir araya getirebilirsiniz .


Else, there are others non-PEAR components, that might be great for you ; for instance, I've heard that
Swift Mailer is great.

Ve o, en azından bazı documentation var gibi görünüyor - Senin durumunda yararlı olabileceğini izleyen sayfalarda, dahil:

Yanı sıra belgeler sınırlıdır, özellikle bir deneyin olabilir - bu çok kolay yanlış veya eskimiş olabilir.


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

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

Ayrıca, php.ini kullanamazsınız bile bazen bazı şeyleri kendiniz ayarlamak için () ini_set kullanabilirsiniz.

çok temel kod sadece size bir fikir göstermek için. olsa çalışma

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"); 
}

Google App Engine

Belki Google App Engine e-posta hizmeti (Bu bir PHP çözüm değil, ama bu gerçekten iyi ölçekler ve ucuz) deneyebilirsiniz. Günlük ücretsiz 2,000 alıcıları (8 alıcı / dakika) e-posta gönderebilirsiniz. Bundan sonra sadece alıcı başına 0,0001 $ (5,100 alıcıları / dakika) ödemek zorunda. Ben bu gerçekten ucuz olduğunu düşünüyorum ve gerçekten iyi çalışıyor.

Email service

Ben gerçek bir basit posta hizmeti geliştirdi. Siz sadece basit app motoru etki için (post verisi) kıvırın.

Quick introduction to google app engine

Eğer bu çözüm istiyorsanız burada 10 dakika içinde python's app engine sdk kullanarak basit bir ziyaretçi defteri creat nasıl açıklayan Brett stalkin tarafından hızlı bir video giriştir. Ben bu oldukça şaşırtıcı olduğunu düşünüyorum.

Code

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()

Configure application

Örneğin aşağıdaki yapılandırma var.

app.yaml

  • application: nameofmyapplication # name of your application

myemail.py

  • sender: app motor için belirtilen yönetici e-posta adresine. Örneğin x@y.com
  • secret: veri göndermek için gizli url için. Örneğin,: 7befe053cf52caba05ad2be3c25c340af7732564

Uploading application to app engine

  1. Bir dizindeki tüm kodu koymak <path to your folder>.
  2. Kullanarak kod yükle appcfg.py update <path to your folder>
  3. Başarılı Eğer online app erişebilirsiniz.

Sending email using curl

Uygulamanızı test etmek için son adım.

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

Arasında tartışmalar <> kendinizi belirtmek zorunda olduğu, ders dışı <>. Ise başarılı sunucu gerekir ile yanıt Message sent. omitting

// 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