Any way I can solve this? SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

  1. I am facing challenges connecting with SMTP provided by PHPMailer.
  2. I have gone as far as setting up the required details under config file/Email Settings.
  3. I also decided to download and installed vendor and adjusted Mail.inc.php (public_html/jodet/lib/pkp/classes/mail/Mail.inc.php) get_oauth_token.php (public_html/jodet/lib/pkp/lib/vendor/phpmailer/phpmailer/get_oauth_token.php) accordingly

OJS Version: 3.3.0-14
Php Version: 8.1

My configuration file

;;;;;;;;;;;;;;;;;;
; Email Settings ;
;;;;;;;;;;;;;;;;;;

[email]

; Use SMTP for sending mail instead of mail()
smtp = On

; SMTP server settings
smtp_server = smtp.gmail.com
smtp_port = 587

; Enable SMTP authentication
; Supported smtp_auth: ssl, tls (see PHPMailer SMTPSecure)
smtp_auth = tls
smtp_username = ‘—my email id’
smtp_password = ‘concealed’

; Supported smtp_authtype: RAM-MD5, LOGIN, PLAIN, XOAUTH2 (see PHPMailer AuthType)
; (Leave blank to try them in that order)
smtp_authtype = XOAUTH2

; The following are required for smtp_authtype = XOAUTH2 (e.g. GMail OAuth)
; (See Using Gmail with XOAUTH2 · PHPMailer/PHPMailer Wiki · GitHub)
smtp_oauth_provider = Google
smtp_oauth_email =‘—my email id’
smtp_oauth_clientid = ‘concealed’
smtp_oauth_clientsecret =‘concealed’
smtp_oauth_refreshtoken = ‘concealed’

; Enable suppressing verification of SMTP certificate in PHPMailer
; Note: this is not recommended per PHPMailer documentation
; smtp_suppress_cert_check = On

; Allow envelope sender to be specified
; (may not be possible with some server configurations)
allow_envelope_sender = On

; Default envelope sender to use if none is specified elsewhere
default_envelope_sender = ‘—my email id’

; Force the default envelope sender (if present)
; This is useful if setting up a site-wide no-reply address
; The reply-to field will be set with the reply-to or from address.
force_default_envelope_sender = On

; Force a DMARC compliant from header (RFC5322.From)
; If any of your users have email addresses in domains not under your control
; you may need to set this to be compliant with DMARC policies published by
; those 3rd party domains.
; Setting this will move the users address into the reply-to field and the
; from field wil be rewritten with the default_envelope_sender.
; To use this you must set force_default_enveloper_sender = On and
; default_envelope_sender must be set to a valid address in a domain you own.
force_dmarc_compliant_from = On

; The display name to use with a DMARC compliant from header
; By default the DMARC compliant from will have an empty name but this can
; be changed by adding a text here.
; You can use ‘%n’ to insert the users name from the original from header
; and ‘%s’ to insert the localized sitename.
; dmarc_compliant_from_displayname = ‘%n via %s’

; Amount of time required between attempts to send non-editorial emails
; in seconds. This can be used to help prevent email relaying via OJS.
time_between_emails = 3600

; Maximum number of recipients that can be included in a single email
; (either as To:, Cc:, or Bcc: addresses) for a non-privileged user
max_recipients = 10

; If enabled, email addresses must be validated before login is possible.
require_validation = Off

; Maximum number of days before an unvalidated account expires and is deleted
validation_timeout = 14

Hi @Norman_Mugumya

You set a different number to the smpt_port parameter. The recommend is
smtp_port = 467

Please, read the documentation:
https://docs.pkp.sfu.ca/admin-guide/3.3/en/email#configuring-the-system-to-use-gmail-smtp

Best,
Israel

That won’t solve the problem either!

Have you checked the Google Support documentation related to SMTP:

Best,
Israel

I’m facing the similar problem after upgrading to the latest release. I tried almost all the techniques, including installation of the latest implement of send mail. None of it helped.

; Use SMTP for sending mail instead of mail()
smtp = On

; SMTP server settings
smtp_server = smtp.mailgun.org
smtp_port = 587
Enable SMTP authentication
; Supported smtp_auth: ssl, tls (see PHPMailer SMTPSecure)
 smtp_auth = tls
 smtp_username = "postmaster@DOMAIN"
 smtp_password = "KEY"
;
; Supported smtp_authtype: RAM-MD5, LOGIN, PLAIN, XOAUTH2 (see PHPMailer AuthType)
; (Leave blank to try them in that order)
; smtp_authtype =

; The following are required for smtp_authtype = XOAUTH2 (e.g. GMail OAuth)
; (See https://github.com/PHPMailer/PHPMailer/wiki/Using-Gmail-with-XOAUTH2)
; smtp_oauth_provider = Google
; smtp_oauth_email =
; smtp_oauth_clientid =
; smtp_oauth_clientsecret =
; smtp_oauth_refreshtoken =

; Enable suppressing verification of SMTP certificate in PHPMailer
; Note: this is not recommended per PHPMailer documentation
 smtp_suppress_cert_check = On

; Allow envelope sender to be specified
; (may not be possible with some server configurations)
allow_envelope_sender = On

; Default envelope sender to use if none is specified elsewhere
default_envelope_sender = postmaster@DOMAIN

; Force the default envelope sender (if present)
; This is useful if setting up a site-wide no-reply address
; The reply-to field will be set with the reply-to or from address.
 force_default_envelope_sender = On
; Force a DMARC compliant from header (RFC5322.From)
; If any of your users have email addresses in domains not under your control
; you may need to set this to be compliant with DMARC policies published by
; those 3rd party domains.
; Setting this will move the users address into the reply-to field and the
; from field wil be rewritten with the default_envelope_sender.
; To use this you must set force_default_enveloper_sender = On and
; default_envelope_sender must be set to a valid address in a domain you own.
 force_dmarc_compliant_from = On

; The display name to use with a DMARC compliant from header
; By default the DMARC compliant from will have an empty name but this can
; be changed by adding a text here.
; You can use '%n' to insert the users name from the original from header
; and '%s' to insert the localized sitename.
dmarc_compliant_from_displayname = '%n'

I resolved this by tweaking the server settings.
First, check if the server allows sending emails through SMTP.

You can set up a custom PHP script in a separate dir to check the same.
Example:

Send Email
      <?php
        if (isset($_POST["Send"])) {
          $Name = $_POST["Name"];
          $Email = $_POST["Email"];
          $Phone = $_POST["Phone"];
          $Message = "Name: ".$Name."\n"."Email: ".$Email."\n"."Mobile: ".$Phone; // The body of the email

          require 'phpmailer/PHPMailerAutoload.php';

          $mail = new PHPMailer();
          $mail->SMTPDebug = SMTP::DEBUG_SERVER;
          $mail->isSMTP();
          $mail->Host = "smtp.gmail.com";
          $mail->SMTPSecure = "tls";
          $mail->Port = 587;
          $mail->SMTPAuth = true;
          $mail->Username = 'normanmugumya00@gmail.com';
          $mail->Password = 'cdgsjgndrrcchrbz';

          $mail->setFrom('no-reply@bsu.ac.ug', 'BSU Systems');
          $mail->addAddress($Email,$Name);
          $mail->Subject = 'SMTP email test';
          $mail->Body = $Message;

          if ($mail->send()){
            ?><div class="alert alert-success">Mail sent</div><?php
          }else{
              echo 'Error: ' . $mail->ErrorInfo;
          }
        }
      ?>
      <form action="" method="POST" role="form">
        <legend>Send Email</legend>
        <div class="form-group">
          <label for="">Name</label>
          <input type="text" class="form-control" name="Name" placeholder="Full Name">
          <label for="">Email Adress</label>
          <input type="email" class="form-control" name="Email" placeholder="Email Address">
          <label for="">Tel. No</label>
          <input type="text" class="form-control" name="Phone" placeholder="Phone Number">
        </div>
        <button type="submit" name="Send" class="btn btn-primary">Send Email</button>
      </form>
    </div>
    <div class="col-md-6"></div>
  </div>

</div>
<!-- jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<!-- Bootstrap JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

My server allows sending. I use Azure for hosting. I have been able to send emails using Mailgun in previous versions of OJS. I just don’t want to downgrade and break the database.