Làm thế nào để có PHP Gửi thư của tôi?


Câu trả lời:


51

Từ hướng dẫn sử dụng thư của php:

Yêu cầu

Để các chức năng thư có sẵn, PHP yêu cầu một hệ thống email được cài đặt và hoạt động. Chương trình được sử dụng được xác định bởi các cài đặt cấu hình trong tệp php.ini.

Điều này có nghĩa là bạn phải cài đặt một số loại máy chủ và cấu hình php để sử dụng nó. Thông thường mailserver này là postfix trong Ubuntu. Tuy nhiên - nếu phía php mà bạn đang mã hóa cuối cùng sẽ được lưu trữ ở phía dịch vụ lưu trữ (ví dụ: xmission), máy chủ thư rất có thể đã được cài đặt ở đó. Trong trường hợp đó, chỉ cần kiểm tra trang web của bạn trực tuyến thay vì cục bộ.

Nếu bạn cần kiểm tra nó trên hệ thống của riêng bạn hoặc có nghĩa là lưu trữ nó trên máy chủ tại nhà của bạn hơn là tiến hành:

Cài đặt Postfix

Cài đặt: postfix Cài đặt hậu tố / sudo apt-get install postfix Trong quá trình bạn sẽ được hỏi ở chế độ nào bạn muốn cài đặt postfix. Có bốn chế độ có thể:

  • Internet : Máy chủ mail của riêng bạn.
  • Vệ tinh : Nhà cung cấp thư bên ngoài (ví dụ Google) sẽ được sử dụng để gửi và nhận thư. Máy chủ sẽ không nhận được bất kỳ thư nào.
  • Smarthost : Hỗn hợp giữa hai. Thư được lưu trữ cục bộ nhưng được gửi qua một nhà cung cấp thư bên ngoài.
  • Chỉ địa phương : Sẽ không quan tâm đến bạn. Đó là một máy chủ thực tập hệ thống. Bạn chỉ có thể gửi thư từ người dùng đến người dùng trên hệ thống.

Phần còn lại của các tùy chọn cài đặt tùy thuộc vào sự lựa chọn của bạn về cấu hình chung này.

Nhiều khả năng bạn sẽ chọn một cài đặt vệ tinh. Điều đó có nghĩa là thư sẽ được gửi bằng nhà cung cấp bên ngoài. Là máy chủ smtp (máy chủ thư đi), sau đó bạn sẽ phải chỉ định nhà cung cấp smtp của mình. Phần còn lại của các tùy chọn là tự giải thích.

Cấu hình cài đặt bài

Hầu hết các máy chủ smtp yêu cầu xác thực mật khẩu để gửi thư. Vì vậy, postfix sẽ cần phải biết mật khẩu đó. Ngoài ra, có những thứ như mã hóa để xem xét (mà bạn sẽ phải google). Đây là cách bạn định cấu hình postfix bằng xác thực mật khẩu (sasl):

  • Cài đặt libsasl2-mô-đun Cài đặt libsasl2-mô-đunsasl2-bin Cài đặt sasl2-bin bằng cách nhấp vào biểu tượng Trung tâm phần mềm hoặc từ thiết bị đầu cuối bằng cách sử dụng:

    sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
    
  • Kích hoạt sasl-auth bằng cách thêm các dòng này vào /etc/postfix/main.cf

     # add to /etc/postfix/main.cf
     smtp_sasl_auth_enable = yes
     smtp_sasl_security_options = noplaintext noanonymous
     smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
    
  • Tạo một tệp /etc/postfix/sasl_passwordvới một dòng như:

     smtp.gmail.com USERNAME@gmail.com:USERPASSWORD
    

    Thay thế mật khẩu thực tế, tên người dùng và địa chỉ smtp.

  • Cập nhật hậu tố:

     sudo chmod 600 /etc/postfix/sasl_password # for safety of your smtp password
     sudo postmap hash:/etc/postfix/sasl_password 
     sudo postmap /etc/postfix/sender_canonical
     sudo /etc/init.d/postfix restart   
    

    Bạn có thể phải phá vỡ 'cho phép từ chối' lỗi bởi chown postfix:postfix /etc/postfixtrước đó.

Điều này sẽ làm điều đó trong hầu hết các trường hợp. Tuy nhiên, một số nhà cung cấp smtp yêu cầu một địa chỉ cụ thể là người gửi hoặc mã hóa.

Liên quan: PEAR :: Giao diện thư cũng có thể được bạn quan tâm.

Gmail (và có lẽ các dịch vụ khác) có thể không thích rằng bạn đang cố gửi thư theo cách này vì nó có thể bị coi là không an toàn theo tiêu chuẩn của họ và sẽ chặn nỗ lực của bạn tức là sẽ không có gì xảy ra trên màn hình hoặc ở đâu đó trong toàn bộ quá trình sẽ chặn xác thực của bạn. Ngoài ra, POP3 của bạn phải được bật.

Để truy cập mà xem ở đây. (Nếu bạn muốn ở bên an toàn, thì hãy tạo một tài khoản Gmail giả)


Gửi thư từ Ubuntu (địa phương) hoạt động. Nhưng nếu tôi muốn Windows của tôi sử dụng máy này để gửi thư (PHP cũng vậy) thì sao? Làm thế nào để tôi cấu hình đó?
JM tại nơi làm việc

Không chắc chắn tôi nhận được câu hỏi. Bạn có thể cát từ máy Ubuntu của bạn. Bây giờ những gì bạn muốn làm là gửi mal qua máy Ubuntu đó từ PC Windows của bạn qua php? Đúng không?
con-f-sử dụng

2
Bây giờ gói libsasl2 không tồn tại. Tôi đang sử dụng 11.04. Libsasl2-2 của nó theo gói cập nhật ..
huyền thoại mã hóa

61

Như đã lưu ý, postfix sẽ là một quá mức nếu bạn chỉ cần gửi email từ php trong khi phát triển các ứng dụng trên máy tính ở nhà của bạn.

Cá nhân tôi sử dụng gói ssmtp rất đơn giản và nhẹ. Nó sẽ sử dụng bất kỳ máy chủ smtp nào để gửi email đi. Cài đặt nó bằng cách chạy:

sudo apt-get install ssmtp

Sau đó chỉnh sửa /etc/ssmtp/ssmtp.conftệp, nhận xét dòng mailhub hiện có và thêm các dòng sau (ví dụ này dành cho máy chủ gmail smtp):

mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=<YOUR-EMAIL>@gmail.com
AuthPass=<YOUR-PASSWORD>

(Cung cấp tên người dùng và mật khẩu gmail của bạn. Tất nhiên bạn có thể sử dụng bất kỳ máy chủ SMTP nào khác).

Bây giờ hãy chắc chắn rằng php.ini của bạn đã chính xác sendmail_path. Nó nên đọc là:

sendmail_path = /usr/sbin/sendmail -t

( Từ ý kiến của @ Dima-l và @ omar-SABIC : Bạn không cần phải chỉ định ssmtpở đây vì quá trình cài đặt nên đã tạo ra một liên kết tượng trưng cho /usr/sbin/sendmail, mà điểm chính xác để ssmtpNếu không, bạn phải chỉ định. sendmail_path = /usr/sbin/ssmtp -t)

Tải lại apache và php của bạn sẽ có thể gửi email đi ngay bây giờ.


3
Tôi nghĩ bạn có ý đó sendmail_path = /usr/sbin/ssmtp -t. Điều này đã có hiệu quả, cảm ơn
Omer Sabic

1
ssmtp nên tạo symlink cho /usr/sbin/sendmail, nó trỏ chính xác đến ssmtp. Vì vậy, sử dụng sendmail_path = /usr/sbin/sendmail -tcũng nên hoạt động
Dima L.

2
Tìm hiểu thêm về cách định cấu hình ssmtp(tìm thấy một số lưu ý hữu ích): Cách thiết lập thư PHP trong Debian - câu hỏi này + liên kết này đã giúp thiết lập chương trình.
gskema

1
Đối với gmail, hãy xem xét bạn phải định cấu hình tài khoản google của mình để cho phép "ứng dụng không an toàn" hoạt động. Xem support.google.com.vn/accountsals/6010255
aesede

1
Tôi cũng đã phải thêm dòng sau: FromLineOverride=YESđể tránh lỗi sau:550 5.7.60 SMTP; Client does not have permissions to send as this sender
Caumons 17/8/2016

29

PHP yêu cầu một máy khách SMTP để gửi thư. Bạn có thể cài đặt một tác nhân chuyển thư đầy đủ tính năng (MTA) như Postfix để phục vụ chức năng này, nhưng sẽ quá mức nếu bạn chỉ cần gửi thư qua PHP. Thay vào đó, cài đặt msmtp . Nó nhẹ và đơn giản hơn nhiều để cấu hình.

Cài đặt msmtp

sudo apt-get install msmtp-mta ca-certificates

Cấu hình nó

Tạo một tệp cấu hình mới:

sudo vi /etc/msmtprc

... với thông tin cấu hình sau:

# Set defaults.
defaults

# Enable or disable TLS/SSL encryption.
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Set up a default account's settings.
account default
host <smtp.example.net>
port 587
auth on
user <username@example.net>
password <password>
from <address-to-receive-bounces@example.net>
syslog LOG_MAIL

Bạn cần thay thế dữ liệu cấu hình được đại diện bởi mọi thứ trong "<" và ">" (đã bao gồm, xóa những dữ liệu này). Đối với máy chủ / tên người dùng / mật khẩu, hãy sử dụng thông tin đăng nhập bình thường của bạn để gửi thư thông qua nhà cung cấp thư của bạn.

Nói với PHP để sử dụng nó

sudo vi /etc/php5/apache2/php.ini

Thêm dòng duy nhất này:

sendmail_path = /usr/bin/msmtp -t

Tất nhiên, 'sudo vi /etc/php5/conf.d' mà không có php.ini sẽ không hoạt động. Trong trường hợp của tôi (Ubuntu), tôi đã phải chỉnh sửa '/etc/php5/apache2/php.ini' và cũng khởi động lại apache 'sudo /etc/init.d/apache2 tải lại' để nó hoạt động.
Dejan

1
BTW, bạn có thể kiểm tra cấu hình msmtprc của mình bằng cách sử dụng:cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
Dejan

Sẽ tốt, nhưng nó không làm việc cho tôi. Không có gì xuất hiện trong nhật ký của nó. Có vẻ như hoàn toàn tốt, nhưng không có xúc xắc.
James T Snell

2
Để cung cấp msmtp trên toàn hệ thống, hãy cài đặt "msmtp-mta".
colan

1
Trong trường hợp bạn quá hiểu chữ như tôi trong các hướng dẫn sau, bạn thực sự không giữ dấu <> trong tệp cấu hình. Mất 20 phút để tìm ra điều đó
de Raad

4

Nên là một sửa chữa đơn giản. Bạn chỉ cần cài đặt Postfix thực hiện gửi email thực tế.

sudo apt-get install postfix

Bạn muốn chạy nó từ một thiết bị đầu cuối (chứ không phải trung tâm phần mềm) bởi vì nó cần hỏi bạn một vài câu hỏi thiết lập. Bạn nên tìm cách chấp nhận tất cả các giá trị mặc định (chỉ cục bộ, v.v.).


2

Đây là một câu hỏi cũ và có câu trả lời xứng đáng ở trên, nhưng tôi cần eximcho môi trường của tôi. Ngoài ra, xác nhận rằng bạn đã cài đặt sendmail ở vị trí đầu tiên ( $ which sendmail- nên trả về một cái gì đó như / usr / sbin / sendmail). Tôi đã tìm thấy một hướng dẫn tốt tại linode.com , nhưng ý chính là:

apt-get install exim4-daemon-light mailutils

theo dõi bởi:

dpkg-reconfigure exim4-config

sẽ đưa bạn đến một trình soạn thảo tương tác.


1

Câu trả lời tuyệt vời , con-f-use.

Tôi có một điều cần nói thêm về "tài khoản gmail giả":

Điều này rất được khuyến khích vì bạn phải định cấu hình tài khoản gmail của mình để cho phép các ứng dụng kém an toàn hơn: https://www.google.com.vn/sinstall/u/0/security/lesssecur Ứng dụng lại Nếu không, bạn sẽ nhận được "vui lòng đăng nhập bằng trình duyệt web của mình và sau đó thử lại "lỗi trong /var/log/mail.logtệp của bạn .

Ngoài ra, tôi thấy rằng tôi nhận được một lỗi thời gian chờ trừ khi tôi gửi gmail smtp sever chứng chỉ gốc của tôi. Để làm điều này:

sudo nano /etc/postfix/main.cf

thêm phần sau vào dưới cùng của tập tin

smtp_tls_CAfile = /etc/postfix/cacert.pem

Sau đó sao chép chứng chỉ gốc thawte vào cacert.pemtệp:

cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem

Đây là liên kết tôi đã sử dụng: Định cấu hình Postfix để sử dụng Gmail SMTP trên Ubuntu | EasyEngine

Hy vọng rằng điều này sẽ cứu ai đó một vài nang tóc ...


0

Tôi thấy các giải pháp được cung cấp bởi Dima L. là cách dễ nhất và nhẹ nhất cho hệ thống.

Chỉ cần một số bổ sung cho rõ ràng hơn về cài đặt. Bạn nên bình luận hostnametrong /etc/ssmtp/ssmtp.conftập tin. Các ssmtp.conftập tin mẫu như sau:

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster

# The place where the mail goes. The actual machine name is required no 
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.yourdomain.com
UseSTARTTLS=YES
AuthUser=mail@yourdomain.com
AuthPass=YOUREMAILPASSWORD

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
#hostname=

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.