SendMail::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 33
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 17
c 1
b 0
f 0
nc 1
nop 9
dl 0
loc 33
rs 9.7

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
namespace EdyWladson\SendMail;
4
5
use PHPMailer\PHPMailer\PHPMailer;
6
use PHPMailer\PHPMailer\Exception;
7
8
/**
9
 * Class SendMail
10
 * @package EdyWladson\SendMail
11
 */
12
class SendMail
13
{
14
    private $data;
15
16
    private $mail;
17
18
    private $message;
19
20
    public function __construct(
21
        string $mail_host,
22
        string $mail_port,
23
        string $mail_user,
24
        string $mail_pass,
25
        string $mail_lang = "en",
26
        string $mail_secure = "tls",
27
        string $mail_charset = "utf-8",
28
        bool $mail_html = true,
29
        bool $mail_auth = true
30
    ) {
31
        $this->mail = new PHPMailer(true);
32
        $this->data = new \stdClass();
33
34
        //setup
35
        $this->mail->isSMTP();
36
        $this->mail->setLanguage($mail_lang);
37
        $this->mail->isHTML($mail_html);
38
        $this->mail->SMTPAuth = $mail_auth;
39
        $this->mail->SMTPSecure = $mail_secure;
40
        $this->mail->CharSet = $mail_charset;
41
42
        //auth
43
        $this->mail->Host = $mail_host;
44
        $this->mail->Port = $mail_port;
0 ignored issues
show
Documentation Bug introduced by
The property $Port was declared of type integer, but $mail_port is of type string. Maybe add a type cast?

This check looks for assignments to scalar types that may be of the wrong type.

To ensure the code behaves as expected, it may be a good idea to add an explicit type cast.

$answer = 42;

$correct = false;

$correct = (bool) $answer;
Loading history...
45
        $this->mail->Username = $mail_user;
46
        $this->mail->Password = $mail_pass;
47
48
        $this->mail->SMTPOptions = array(
49
            'ssl' => array(
50
                'verify_peer' => false,
51
                'verify_peer_name' => false,
52
                'allow_self_signed' => true
53
            )
54
        );
55
    }
56
57
    public function mail(string $subject, string $body, string $recipientMail, string $recipientName): SendMail
58
    {
59
        $this->data->subject = $subject;
60
        $this->data->body = $body;
61
        $this->data->recipientMail = $recipientMail;
62
        $this->data->recipientName = $recipientName;
63
        return $this;
64
    }
65
66
    public function send(string $fromMail, string $fromName): bool
67
    {
68
        if (empty($this->data)) {
69
            $this->message = "Error sending, please check the data";
70
            return false;
71
        }
72
73
        if (!filter_var($this->data->recipientMail, FILTER_VALIDATE_EMAIL)) {
74
            $this->message = "The recipient's email is not valid";
75
            return false;
76
        }
77
78
        if (!filter_var($fromMail, FILTER_VALIDATE_EMAIL)) {
79
            $this->message = "The sender's email is not valid";
80
            return false;
81
        }
82
83
        try {
84
            $this->mail->setFrom($fromMail, $fromName);
85
            $this->mail->Subject = $this->data->subject;
86
            $this->mail->msgHTML($this->data->body);
87
            $this->mail->addAddress($this->data->recipientMail, $this->data->recipientName);
88
89
            $this->mail->send();
90
            return true;
91
        } catch (Exception $exception) {
92
            $this->message = $exception->getMessage();
93
            return false;
94
        }
95
    }
96
97
    public function message(): string
98
    {
99
        return $this->message;
100
    }
101
}
102