• About
  • Advertise
  • Privacy & Policy
  • Contact
DevZone
  • Home
  • News
  • Dev
    • All
    • Algorithm
    • Architecture
    • Database
    • Design
    • DevOps
    • IoT
    • Network
    • Test
    • Web
    Phương thức xử lý mảng trong javascript

    Phương thức xử lý mảng trong javascript

    Bảo vệ content, chống copy nội dung web!

    Bảo vệ content, chống copy nội dung web!

    Lưu ý mệnh đề NOT IN trong SQL

    Lưu ý mệnh đề NOT IN trong SQL

    SOLID Principles: Dependency Inversion Principle

    SOLID Principles: Dependency Inversion Principle

    Solid Principles: Interface Segregation Principle

    Solid Principles: Interface Segregation Principle

    Tìm hiểu về composer.json schema (phần 2 – autoload)

    Tìm hiểu về composer.json schema (phần 2 – autoload)

    IPC – Đằng sau sự thành công của Chromium

    IPC – Đằng sau sự thành công của Chromium

    Dựng layout website với CSS Grid Layout

    Dựng layout website với CSS Grid Layout

    Golang cơ bản (p1)

    Golang cơ bản (p1)

    Trending Tags

    • Idea
    • Lifestyle
    No Result
    View All Result
    • Home
    • News
    • Dev
      • All
      • Algorithm
      • Architecture
      • Database
      • Design
      • DevOps
      • IoT
      • Network
      • Test
      • Web
      Phương thức xử lý mảng trong javascript

      Phương thức xử lý mảng trong javascript

      Bảo vệ content, chống copy nội dung web!

      Bảo vệ content, chống copy nội dung web!

      Lưu ý mệnh đề NOT IN trong SQL

      Lưu ý mệnh đề NOT IN trong SQL

      SOLID Principles: Dependency Inversion Principle

      SOLID Principles: Dependency Inversion Principle

      Solid Principles: Interface Segregation Principle

      Solid Principles: Interface Segregation Principle

      Tìm hiểu về composer.json schema (phần 2 – autoload)

      Tìm hiểu về composer.json schema (phần 2 – autoload)

      IPC – Đằng sau sự thành công của Chromium

      IPC – Đằng sau sự thành công của Chromium

      Dựng layout website với CSS Grid Layout

      Dựng layout website với CSS Grid Layout

      Golang cơ bản (p1)

      Golang cơ bản (p1)

      Trending Tags

      • Idea
      • Lifestyle
      No Result
      View All Result
      DEVZONE
      No Result
      View All Result
      Home Dev DevOps

      Xây dựng Email Server với Postfix, Dovecot và Roundcube: #3 – Sử dụng nhiều domain email và một số cấu hình

      Bách Nguyễn by Bách Nguyễn
      January 31, 2020
      in DevOps
      0
      Xây dựng Email Server với Postfix, Dovecot và Roundcube: #3 – Sử dụng nhiều domain email và một số cấu hình

      Xin chào! Ở các phần trước tôi đã hướng dẫn các bạn cách cài email server với Postfix và Dovecot, cài đặt và cấu hình cơ bản Roundcude để có một giao diện quản lý email một cách thân thiện. Tiếp theo phần này và cũng là phần cuối tôi sẽ hướng dẫn các bạn cách cấu hình để bạn có thể sử dụng nhiều email domain trên server email sẵn có, việc này sẽ giúp tiết kiệm chi phí cũng như công sức cài đặt một email server mới. Ngoài ra, tôi cũng sẽ hướng dẫn các bạn một số cấu hình để gửi email không bị vào mục Spam.

      I. Cấu hình sử dụng nhiều email domain trên server mail có sẵn
      Để cấu hình nhiều email domain trên server email đã cài và cấu hình xong với Postfix cần thay đổi một chút trong file main.cf. Tất nhiên domain mới bạn muốn cấu hình cần phải được trỏ 2 bản ghi A và MX như hướng dẫn trong phần #1. Mở file trong đường dẫn /etc/postfix/main.cf với lệnh sau

      sudo vi /etc/postfix/main.cf
      

      Sau đó tìm dòng mynetworks. Bạn thêm domain bạn đã trỏ DNS về server email của bạn. Lưu ý thêm domain vào dòng này rất quan trọng, vì nếu bạn quên bước này email của bạn sẽ không thể gửi ra ngoài được. Ví dụ thay đổi dòng mynetworks từ:

      mynetworks = 127.0.0.0/8, 45.23.44.0/24
      

      Thành:

      mynetworks = 127.0.0.0/8, 45.23.44.0/24, example2.com, example3.com
      

      Tiếp theo bạn cần tạo 2 file để map domain và user cho từng domain đó. Sử dụng lệnh sau để tạo 2 file đó:

      touch /etc/postfix/virtual_domains
      touch /etc/postfix/virtual_users
      

      Mở file virtual_domains và thêm các domain bạn mới trỏ cùng domain sẵn có từ trước như sau:

      example.com OK
      example2.com OK
      example3.com OK
      

      Sau đó bạn tạo user và password trên Centos bằng lệnh sau:

      useradd -m admin_example2 -s /sbin/nologin
      passwd admin_example2
      

      Tương tự bạn có thể tạo các user của các domain khác và đánh dấu thế nào để dễ nhận biết user đó thuộc domain nào là tuỳ theo các bạn, như mình là username_domain. Việc tạo là cần thiết vì khi một email được gửi đến Postfix cần phải biết email đó là của user nào. Sau khi tạo xong các user cần thiết, bạn cần thay đổi file virtual_users như sau.

      sudo vi /etc/postfix/virtual_users
      
      #Thêm các dòng như bên dưới
      admin@example.com admin_example
      admin@example2.com admin_example2
      admin@example3.com admin_example3
      

      Ở đoạn ví dụ phía trên thì bên phải là email mà bạn sẽ dùng để gửi nhận ra bên ngoài và bên phải là user map với email đó. Nếu bạn muốn tự động forward đến một email khác thì bạn chỉ cẩn đổi cột user thành email sẽ nhận forward. Giống như thế này:

      #Từ
      admin@example.com admin_example
      #Thành
      admin@example.com abc@gmail.com xyz@yahoo.com
      

      Bạn có thể forward tới một hoặc nhiều email cùng lúc bằng cách thêm các email muốn nhận forward ngăn cách bằng khoảng trắng. Sau khi đã sửa xong 2 file virtual_domains và virtual_users thì bạn lưu và đóng 2 file đó lại. Sau đó lại mở file main.cf lên để sử tiếp như sau:

      sudo vi /etc/postfix/main.cf
      
      #Thêm 2 dòng sau vào cuối file main.cf
      virtual_alias_domains = hash:/etc/postfix/virtual_domains
      virtual_alias_maps = hash:/etc/postfix/virtual_users
      

      Sau đó lưu file và chạy các lệnh sau để map và restart lại Postfix:

      postmap /etc/postfix/virtual_domains
      postmap /etc/postfix/virtual_users
      sudo systemctl restart postfix
      

      Lưu ý: Sau mỗi lần bạn sửa file virtual_users và virtual_domains đều cần chạy lại những lệnh này đê Postfix map lại các cấu hình. Điều này rất quan trọng vì nếu không các cấu hình mới sẽ không nhận.

      II. Sử dụng Roundcube với nhiều email domain
      Roundcube là giao diện quản lý mail khá thân thiện và dễ sử dụng. Nhưng mặc định Roundcube chỉ chạy với một email domain. Tôi cũng đã thử tìm hiểu các plugin hỗ trợ việc sử dụng nhiều email domain với Roundcube nhưng cấu hình khá phức tạp và sử dụng không như mong muốn. May thay chỉnh sửa source code của Roundcube cũng không khó khăn lắm vì nó sử dụng PHP. Sau đây tôi sẽ hướng dẫn các bạn chỉnh sửa một chút để có thể sử dụng nhiều email domain với Roundcube một cách dễ dàng.
      Bạn hãy mở source code Roundcube đang chạy trên server của bạn lên. Sau đó mở file index.php (file này nằm ngay root của thư mục source Roundcube). Ta sẽ sửa những dòng sau:

      $RCMAIL->kill_session();
      // Thêm đoạn code này vào để validate định dạng email. 
      $user_input = rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST);
      $valid_email = true;
      if ( !filter_var($user_input, FILTER_VALIDATE_EMAIL) ) {
          $valid_email = false;
      }
      

      Chú ý đoạn code mới thêm đặt ngay sau dòng $RCMAIL->kill_session(); . Tiếp theo vẫn trong file index.php đó, tìm đoạn code sau:

      $auth = $RCMAIL->plugins->exec_hook('authenticate', array(
              'host'  => $RCMAIL->autoselect_host(),
              'user'  => trim(rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST)),
              'pass'  => rcube_utils::get_input_value('_pass', rcube_utils::INPUT_POST, true, $pass_charset),
              'valid' => $request_valid,
              'cookiecheck' => true,
      ));
      
      // Sửa thành như sau 
      if ( $valid_email ) {
          $auth = $RCMAIL->plugins->exec_hook('authenticate', array(
                  'host'  => $RCMAIL->autoselect_host(),
                  'user'  => trim(rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST)),
                  'pass'  => rcube_utils::get_input_value('_pass', rcube_utils::INPUT_POST, true, $pass_charset),
                      'valid' => $request_valid,
                      'cookiecheck' => true,
              ));
           // Lấy username cho từ email, gán lại 2 biến $auth['host'] và $auth['user'] để phù hợp với code cũ.
           if ( strpos($auth['user'], '@')) {
               $explode_user_domain = explode('@', $auth['user']);
               $auth['host'] = 'mail.' . $explode_user_domain[1];
               $auth['user'] = $explode_user_domain[0];
            }
      }
      
      

      Tiếp theo tìm đoạn điều kiện if như sau và thêm điều kiện validate email vào trong đó như sau:

      //Từ 
          // Login
          if ($auth['valid'] && !$auth['abort']
              && $RCMAIL->login($auth['user'], $auth['pass'], $auth['host'], $auth['cookiecheck'])) {
      
      // Thành 
          // Login
          if ($auth['valid'] && !$auth['abort']
              && $RCMAIL->login($auth['user'], $auth['pass'], $auth['host'], $auth['cookiecheck'])
              &amp;&amp; $valid_email //<---- thêm cái dòng này vào.
          ) {
      
      

      Cuối cùng là tìm dòng $error_message (nó nằm ở dòng số khoảng 181 – 183) để thêm một đoạn thông báo lỗi khi người dùng nhập sai định dạng email:

      $error_message = !empty($auth['error']) &amp;&amp; !is_numeric($auth['error']) ? $auth['error'] : ($error_labels[$error_code] ?: 'loginfailed');
      // Thêm đoạn if như bên dưới.
      if ( !$valid_email ) {
         $error_message = 'Username must be email address.';
      }
      

      Sau khi hoàn tất các bước trên, lưu file index.php và update code mới lên server của bạn và thử xem kết quả thế nào. Mật khẩu của user đăng nhập trên Roundcube chính là mật khẩu user bạn tạo từ câu lệnh useradd trên Centos.

      Tags: multiple domainsroundcube
      Thả tim (3 lượt thả tim)
      Loading...
      Previous Post

      Postman - Công cụ kiểm thử và phát triển API

      Next Post

      JSON Web Token và những điều bạn chưa biết

      Bách Nguyễn

      Bách Nguyễn

      Next Post
      json-web-token

      JSON Web Token và những điều bạn chưa biết

      Leave a Reply Cancel reply

      Your email address will not be published. Required fields are marked *

      Recent News

      Lập trình viên không dùng máy Mac nhiều như người ta đã nghĩ

      Lập trình viên không dùng máy Mac nhiều như người ta đã nghĩ

      July 25, 2020
      Dấu hiệu nhận biết sức khỏe qua liềm móng tay

      Dấu hiệu nhận biết sức khỏe qua liềm móng tay

      June 26, 2020
      Phương thức xử lý mảng trong javascript

      Phương thức xử lý mảng trong javascript

      May 31, 2020
      Lợi ích của việc tập thể dục thường xuyên

      Lợi ích của việc tập thể dục thường xuyên

      May 25, 2020
      DEVZONE

      Browse by Category

      • Algorithm
      • Architecture
      • Database
      • Design
      • Dev
      • DevOps
      • Idea
      • IoT
      • Lifestyle
      • Network
      • News
      • Test
      • Uncategorized
      • Web
      • About
      • Advertise
      • Privacy & Policy
      • Contact

      © 2019 Devzone

      No Result
      View All Result

      © 2019 Devzone