OpenCart-Hellas 

Η Ελληνική κοινότητα υποστήριξης του Opencart

Αναφορές νέων & επίλυση γνωστών bugs.
#5390
Καλησπέρα στην Ομάδα του Opencart Hellas

Δουλεύουμε σε ένα project με Opencart version 2.1.0.2 κ Journal Theme. Έχουμε ρυθμίσει στα settings το email να δουλεύει με Mail Protocol SMPT και τα υπόλοιπα στοιχεία σύμφωνα και με το GSuite gmail account μας.(Δείτε επισυναπτόμενη εικόνα)

Ενώ δουλεύουν όλα άψογα παρατηρήθηκε το γεγονός ότι κάποια email δεν πήγαιναν στον πελάτη και στο κατάστημα μας όσο αναφορά τα confirmation order email.
Παρατηρήσαμε ότι τα συγκεκριμένα email είχαν ένα κενό ενώ είχε ολοκληρωθεί η παραγγελία πχ. name@hotmail. com ή ήταν της μορφής [email protected].
Σε αυτήν την περίπτωση παίρνουμε και το συγκεκριμένο error.
Κώδικας: Επιλογή όλων
2018-08-******* - PHP Notice:  Error: RCPT TO not accepted from server! in /home/********/public_html/************/opencart/system/library/mail.php on line 346
To τεστάραμε και σε fresh installation από το Opencart 2.1.0.2 για να αποκλείσουμε το γεγονός ότι ευθύνεται το Journal Theme και όντως εμφανίζει το ίδιο error και σε fresh installation.

Θα θέλαμε να ρωτήσουμε αν έχει παρατηρήσει κάποιος η είχε παρόμοιο σφάλμα σύμφωνα και με τα όσα αναφέρουμε πιο πάνω ή είναι κάποιο Bug του Opencart.
Ευχαριστούμε εκ των προτέρων.
Πρέπει να συνδεθείτε για να δείτε τα συνημμένα αρχεία σε αυτήν τη δημοσίευση.
Τελευταία επεξεργασία από το μέλος agathon την 28 Αύγ 2018, 10:33, έχει επεξεργασθεί 1 φορά συνολικά.
#5391
Καλημέρα,

Πρόκειται για bug, που επιτρέπει κενά στο πεδίο του email του checkout -ενώ κατά την εγγραφή υπάρχει ένα στοιχειώδες validation. Τα σφάλματα που λάβατε πιθανότατα προέκυψαν επειδή κάποιος πελάτης εισήγαγε κατά λάθος κενό στο mail του.

Επίσης μόλις είδα ότι δεν υπάρχει validation για κενά στα email ούτε στο journal που εφαρμόζει δικό του validation κατά το checkout.

Για το Journal quick checkout άνοιξε το αρχείο catalog/controller/journal2/checkout.php και τη γραμμή:
Κώδικας: Επιλογή όλων
if ((utf8_strlen($data['email']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $data['email'])) {
Κάνε τη:
Κώδικας: Επιλογή όλων
if ((utf8_strlen($data['email']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $data['email']) || preg_match('/\s/', $data['email'])) {
#5392
Καλημέρα,
Ευχαριστώ πολύ για την απάντηση.

Πέρασα το fix
Κώδικας: Επιλογή όλων
if ((utf8_strlen($data['email']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $data['email']) || preg_match('/\s/', $data['email'])) {
Στο Path από το quick checkout του Journal catalog/controller/journal2/checkout.php αλλά συνεχίζει να μου δίνει το ίδιο error.

Προσπάθησα να περάσω το email με ένα κενό πριν το TLD του email και μου περνάει την παραγγελία κανονικά, χωρίς να με κόβει με μήνυμα προειδοποίησης λάθος σύνταξης του email.
Σε διάφορα test για να δω πότε μου εμφανίζει το error.
1) κενο[email protected]
2) name@domainκενο.gr
3) [email protected]
4) name@domain,gr (με κόμμα αντί για τελεία)

Ήθελα να ρωτήσω μήπως το fix πρέπει να το περάσω στο
path /catalog/controller/checkout/guest.php

και πως μπορώ να βελτιώσω το validation και για τις παραπάνω συνθήκες λάθος σύνταξης του email.

Ευχαριστώ εκ των προτέρων.


**(Edited)** Σε fresh installation από Opencart 2.1.0.2 το fix φαίνεται να δουλεύει όταν βάζω κενό στο email
πειράζοντας το αρχείο /catalog/controller/checkout/guest.php
Αλλά με Journal
είτε στο catalog/controller/journal2/checkout.php
είτε στο /catalog/controller/checkout/guest.php
περνώντας το validation για το κενό φαίνεται πώς δεν λειτουργεί.
#5393
Καλησπέρα,

Έχεις ενεργοποιημένο το quick checkout;
Το fix είναι για αγορά ως guest ή αγορά με εγγραφή στο quick checkout του journal και εντοπίζει κενά όπως
myemail@gmail .com

Τα αρχεία /catalog/controller/checkout/guest.php και /catalog/controller/checkout/register.php
είναι για το κανονικό checkout του OpenCart.
Αν χρησιμοποιείς το κανονικό τότε στα guest.php και register.php το κάνεις από:
Κώδικας: Επιλογή όλων
if ((utf8_strlen($this->request->post['email']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $this->request->post['email'])) {
στο ακόλουθο:
Κώδικας: Επιλογή όλων
if ((utf8_strlen($this->request->post['email']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $this->request->post['email']) || preg_match('/\s/', $this->request->post['email'])) {
Επίσης ανεξαρτήτως αν έχεις journal ή όχι, για να προσθέσεις validation και στην επεξεργασία στοιχείων στον λογαριασμό εγγεγραμμένων πελατών το παραπάνω το περνάς και στο catalog/controller/account/edit.php
#5394
Καλησπέρα,
Μπορώ να επιβεβαιώσω ότι για το κανονικό checkout του OpenCart δουλεύει.

Στην Σελίδα μας είναι ενεργοποιημένο το Quick Checkout του Journal από το αντίστοιχο control panel του Journal Theme. Εκεί παρόλο που πέρασα το fix από το πρώτο Post
Κώδικας: Επιλογή όλων
 if ((utf8_strlen($data['email']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $data['email']) || preg_match('/\s/', $data['email'])) { 
στο path catalog/controller/journal2/checkout.php δεν κάνει τον έλεγχο και μπορώ να ολοκληρώσω την παραγγελία κανονικά.

Έκανα clear cache από το Control Panel του Journal αλλά πάλι δεν κάνει τον έλεγχο για το space στο email.
#5395
Το validation στο journal quick checkout είναι για επισκέπτες ή νέες εγγραφές. Δεν είναι για εγγεγραμμένους που το validation τους πρέπει να γίνεται από τα controller/account/register.php και controller/account/edit.php

Αν τα έκανες όλα όπως ανέφερα, και πάλι έχεις πρόβλημα δοκίμασε να διαγράψεις και να ανανεώσεις το cache των τροποποιήσεων OCMOD και να διαγράψεις το περιεχόμενο του vqmod/vqcache, τα vqmod/checked.cache και vqmod/mods.cache.


Αν όλα πάνε καλά με το checkout και είσαι τελειομανής, μπορείς να βελτιώσεις όλα τα email validation του opencart στις ακόλουθες σελίδες:

Opencart Native Αρχεία
controller/api/voucher.php
controller/account/register.php
controller/checkout/guest.php
controller/checkout/register.php
controller/affiliate/edit.php
controller/affiliate/register.php
controller/information/contact.php
controller/account/voucher.php
controller/account/return.php
controller/account/edit.php
controller/account/register.php

Journal
controller/journal2/checkout.php
controller/module/journal2_popup.php

Τέλος αντί της μεθόδου validation που έχει το opencart, μπορείς να χρησιμοποιήσεις και την ακόλουθη που χρησιμοποιεί το validation της PHP όπου αντικαθιστάς το "η-μεταβλητή-του-email" με την εκάστοτε μεταβλητή που χρησιμοποιείται για το email στην κάθε σελίδα:
Κώδικας: Επιλογή όλων
if ((utf8_strlen($data['email']) > 96) || !filter_var(η-μεταβλητή-του-email, FILTER_VALIDATE_EMAIL, FILTER_FLAG_EMAIL_UNICODE)) {
* Υπόψη, Όλες οι μέθοδοι validation που συζητήσαμε δεν υποστηρίζουν domains με Ελληνικούς χαρακτήρες.
#5396
Καλημέρα,
Ευχαριστώ πολύ για τον Χρόνο σου και τις απαντήσεις.
Αν τα έκανες όλα όπως ανέφερα, και πάλι έχεις πρόβλημα δοκίμασε να διαγράψεις και να ανανεώσεις το cache των τροποποιήσεων OCMOD και να διαγράψεις το περιεχόμενο του vqmod/vqcache, τα vqmod/checked.cache και vqmod/mods.cache.
Κάνοντας διαγραφή της cache όπως μου ανέφερες δουλεύει σωστά ο έλεγχος όταν έχει κενό το email.

Τέλος το συγκεκριμένο κομμάτι κώδικα
Κώδικας: Επιλογή όλων
if ((utf8_strlen($data['email']) > 96) || !filter_var(η-μεταβλητή-του-email, FILTER_VALIDATE_EMAIL, FILTER_FLAG_EMAIL_UNICODE)) {
Προσαρμόζοντας το στο controller/journal2/checkout.php
και αλλάζοντας το
Κώδικας: Επιλογή όλων
if ((utf8_strlen($data['email']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $data['email'])) {
με
Κώδικας: Επιλογή όλων
if (!filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
αυτό φαίνεται ότι διορθώνει το πρόβλημα.
#5397
Δεν πρέπει να παραλείπεις και τον έλεγχο (utf8_strlen($data['email']) > 96) γιατί ελέγχει ότι το email δεν ξεπερνά τους 96 χαρακτήρες που αν κάποιος για κάποιο τρελό δικό του λόγο θέλει να έχει μεγαλύτερο email από 96 χαρακτήρες αυτό θα περάσει στη βάση κροπαρισμένο και δεν θα υπάρχει πουθενά προειδοποίηση ότι συνέβη. Υπόψη ότι το πρωτόκολλο του mail υποστηρίζει emails έως 256 χαρακτήρες αλλά η βάση του OpenCart υποστηρίζει 96.

Καλησπέρα στην ομάδα, θέλω να ρωτήσω το εξής: Σε O[…]

Σας ευχαριστώ πολύ για την απάντηση, σκεφτείτε η ε[…]

Έλεγξε αν έχεις πολύ μεγάλα αρχεία εικόνων και αν […]

Κάνε ένα restart τον σερβερ. (βασικα την λειτουργι[…]

Πριν ζητήσετε βοήθεια στο φόρουμ, παρακαλούμε ελέγξτε αν υπάρχει έτοιμη λύση στο OpenCart Extension Marketplace!