Fix lỗi gửi mail không kèm chữ ký ở mudule MultipleSMTP

Khi gửi mail từ SMTP từ tab related

Khi click vào nút “Gửi Email” thì sẽ gọi http request về hệ thống với các tham số như sau:

selected_ids: [“408348”]
excluded_ids: “”
viewname:
module: MultipleSMTP
mode: massSave
toemailinfo: {“408348”:[“holt@innocom.vn”]}
view: MassSaveAjax
to: [“holt@innocom.vn”]
toMailNamesList: {“408348”:[{“label”:”vu test”,”value”:”holt@innocom.vn”}]}
flag: SENT
documentids:
emailMode:
source_module:Patron
search_key:
operator:
search_value:
search_params:null
number_of_smtp: 0
toEmail: holt@innocom.vn
cc:
bcc:
subject: Test Send Mail
file[]:(binary)
signature: Yes
description: <html> <head> <title></title> </head> <body>Test Send Mail Content</body> </html>
attachments: null
__vtrftk:
sid:8505278c7e5171285d2192a1daaa92744329d04e,1612147901
Khi nhận request này thì hệ thống sẽ chạy module: MultipleSMTP -> view: MassSaveAjax -> mode: massSave
Dựa vào 3 tham số trên thì hệ thống sẽ thực thi mã lệnh theo đường dẫn: modules/MultipleSMTP/views/MassSaveAjax.php thực thi phương thức: massSave(Vtiger_Request $request)
Ở đây có lỗi phát sinh trong do sự khác nhau giữa các phiên bản php. Code hiện tại đang viết cho php 5.xx  còn hiện tại hệ tại khách hàng đã nâng lên php 7.xx nên phát sinh lỗi tại câu dòng code:
$number_of_smtp = $request->get('number_of_smtp');
if (0 === $number_of_smtp)
Như trên $number_of_smtp là kiểu chuỗi ở php 5 biểu thức (0 === $number_of_smtp) = true
Nhưng trên php 7 trở về sao (0 === $number_of_smtp) = false
Nên như trong hình thì nó sẽ đi vào khối lênh else của cấu trúc điều kiện.

Trong code cũ thì không có dòng

$signature = $request->get('signature');
Nên không lấy được trạng thái đã check chọn đính kèm chữ ký trên from.

và thiếu dòng lệnh lưu xuống model:

$recordModel->set('signature', $signature);

Trên php 7 trở lên function initialize() bắt buột phải có khai báo private (2)

Phương thứ send cũng phải khai báo cho giống với phương thức mà nó được kế thừa.(2)

Những chỗ được đánh số (2) không fix cũng không sao. Vì ở đây nó chỉ bị warring thôi chỉ bị anh hưởng đến performent của code đó cũng có thể là những lỗi tiềm ẩn trong tương lai.

Đánh giá về mã nguồn của phương thức: massSave(Vtiger_Request $request)

Không được tốt lắm theo chuẩn “Coding Conventions”

 

 

Leave a Reply

You must be logged in to post a comment.