PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

sp_send_dbmail thay thế trong postgres? Cách dễ dàng để gửi báo cáo qua email Postgres?

Bạn có thể sử dụng pgMail để gửi thư từ bên trong PostgreSQL.

Điều kiện tiên quyết:

Trước khi có thể sử dụng pgMail, bạn phải cài đặt ngôn ngữ thủ tục TCL / u. TCL / u là phiên bản KHÔNG HẠN CHẾ của TCL mà cơ sở dữ liệu của bạn có thể sử dụng trong các chức năng được lưu trữ của nó. Trước khi bạn bắt đầu cài đặt ngôn ngữ thủ tục TCL không hạn chế trong tất cả cơ sở dữ liệu của mình, hãy lưu ý rằng bạn phải chuẩn bị các biện pháp phòng ngừa bảo mật đầy đủ khi thêm ngôn ngữ TCL / u vào cơ sở dữ liệu của mình! Tôi sẽ không chịu trách nhiệm về các máy chủ được định cấu hình sai cho phép những người dùng nguy hiểm làm điều xấu!

Để cài đặt ngôn ngữ thủ tục TCL / u, bạn phải biên dịch (hoặc sử dụng các gói nhị phân) và cài đặt các phần mở rộng TCL của PostgreSQL. Khi bạn chắc chắn rằng việc này đã được hoàn tất, chỉ cần nhập dòng sau vào lời nhắc unix shell với tư cách là quản trị viên cơ sở dữ liệu.

# createlang pltclu [YOUR DATABASE NAME]

Thay cho [YOUR DATABASE NAME] , đặt tên của cơ sở dữ liệu mà bạn sẽ thêm thủ tục được lưu trữ vào. Nếu bạn muốn nó được thêm vào tất cả các cơ sở dữ liệu MỚI, hãy sử dụng "template1" làm tên cơ sở dữ liệu của bạn.

Trước khi thêm thủ tục mới vào DB, trước tiên hãy làm:

Thay thế văn bản <ENTER YOUR MAILSERVER HERE> với tên miền đủ điều kiện cho máy chủ thư của bạn. tức là mail.server.com.

Thay thế văn bản <ENTER YOUR DATABASESERVER HERE> với tên miền đủ điều kiện cho máy chủ cơ sở dữ liệu của bạn. tức là db.server.com.

Khi bạn đã thực hiện những điều trên, bạn đã sẵn sàng để bắt đầu.

Sau bước này, sử dụng giao diện psql để thêm chức năng pgMail. Chỉ cần sao chép nội dung của tệp pgmail.sql và dán vào cửa sổ của bạn. Bạn cũng có thể tải nó trực tiếp từ dòng lệnh bằng cách gõ:

# psql -e [YOUR DATABASE NAME] < pgMail.sql

Khi bạn đã cài đặt hàm được lưu trữ, chỉ cần gọi quy trình như sau.

select pgmail('Send From ','Send To ','Subject goes here','Plaintext message body here.');

select pgmail('Send From ','Send To ','Subject goes here','','HTML message body here.');

Hoặc bây giờ, nhiều phần MIME!

select pgmail('Send From ','Send To ', 'Subject goes here','Plaintext message body here.', 'HTML message body here.');

Trong cả hai trường "Gửi Từ" và "Gửi tới", bạn có thể chỉ bao gồm email hoặc email được gửi kèm trong <> với tên văn bản rõ ràng.

Kiểm tra cài đặt của bạn

Tôi đã bao gồm một ví dụ để bạn thử. Trước hết bạn PHẢI thay thế chuỗi trong tập lệnh example.execute.sql bằng địa chỉ email thực của bạn và cài đặt ngôn ngữ plpgsql giống như bạn đã làm với pltclu ở trên. Bạn có thể làm điều đó bằng cách nhập createlang [YOUR DATABASE NAME] plpgsql .

Sau khi hoàn tất, trước tiên hãy chạy example.setup.sql. Sau đó thực thi script example.execute.sql. Với điều kiện mọi thứ hoạt động tốt, bạn sẽ thấy 2 email trong hộp thư của mình. Để xóa ví dụ này, hãy thực thi example.cleanup.sql tập lệnh.

Xác thực SMTP

pgMail không hỗ trợ SMTP Auth. Hầu hết những người sử dụng nó hoặc thiết lập một máy chủ thư cục bộ trên máy chủ cơ sở dữ liệu để xếp hàng cục bộ và sau đó sử dụng thiết lập đó cho bất kỳ chuyển tiếp nào được yêu cầu (với auth). Hoặc, cách khác, thường có một quy tắc đặc biệt được thực hiện trong tệp / etc / mail / access (hoặc tương đương) để cho phép chuyển tiếp từ IP đó được sử dụng bởi máy chủ cơ sở dữ liệu. Rõ ràng, tùy chọn thứ hai không hoạt động với GMail.

Một phần lý do đằng sau điều này là auth sẽ có vấn đề trong bản chất giao dịch của pgMail cho các công việc lớn. Giải pháp lý tưởng sẽ là thả một máy chủ EXIM trên máy chủ cơ sở dữ liệu và có máy chủ đó xử lý bất kỳ loại xác thực nào như một máy chủ chuyển tiếp thông minh. Đây là liên kết có thêm thông tin về cách thiết lập máy chủ SMTP .

Tài liệu: http://brandolabs.com/pgmail



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres ĐỂ LOOP

  2. Nhiều chỉ mục so với một chỉ mục trên nhiều cột trong postgresql

  3. pg_restore:[archiver] phiên bản không được hỗ trợ (1.13) trong tiêu đề tệp

  4. Bỏ một vai trò với các đặc quyền

  5. Cách nhóm có điều kiện thành cột mà không cần sử dụng FULL OUTER JOIN