@ -0,0 +1,2 @@ |
||||
/config/PRIVATE/* |
||||
!/config/PRIVATE/*.example |
@ -1,6 +0,0 @@ |
||||
<?php |
||||
|
||||
$_ENV['newsletter_url_fr'] =''; |
||||
$_ENV['newsletter_url_en'] =''; |
||||
|
||||
?> |
Before Width: | Height: | Size: 238 KiB |
After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 772 B |
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 546 B |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 588 B |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 881 B After Width: | Height: | Size: 600 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 457 KiB After Width: | Height: | Size: 253 KiB |
After Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 322 KiB After Width: | Height: | Size: 239 KiB |
After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 29 KiB |
@ -0,0 +1,46 @@ |
||||
GPL Cooperation Commitment |
||||
Version 1.0 |
||||
|
||||
Before filing or continuing to prosecute any legal proceeding or claim |
||||
(other than a Defensive Action) arising from termination of a Covered |
||||
License, we commit to extend to the person or entity ('you') accused |
||||
of violating the Covered License the following provisions regarding |
||||
cure and reinstatement, taken from GPL version 3. As used here, the |
||||
term 'this License' refers to the specific Covered License being |
||||
enforced. |
||||
|
||||
However, if you cease all violation of this License, then your |
||||
license from a particular copyright holder is reinstated (a) |
||||
provisionally, unless and until the copyright holder explicitly |
||||
and finally terminates your license, and (b) permanently, if the |
||||
copyright holder fails to notify you of the violation by some |
||||
reasonable means prior to 60 days after the cessation. |
||||
|
||||
Moreover, your license from a particular copyright holder is |
||||
reinstated permanently if the copyright holder notifies you of the |
||||
violation by some reasonable means, this is the first time you |
||||
have received notice of violation of this License (for any work) |
||||
from that copyright holder, and you cure the violation prior to 30 |
||||
days after your receipt of the notice. |
||||
|
||||
We intend this Commitment to be irrevocable, and binding and |
||||
enforceable against us and assignees of or successors to our |
||||
copyrights. |
||||
|
||||
Definitions |
||||
|
||||
'Covered License' means the GNU General Public License, version 2 |
||||
(GPLv2), the GNU Lesser General Public License, version 2.1 |
||||
(LGPLv2.1), or the GNU Library General Public License, version 2 |
||||
(LGPLv2), all as published by the Free Software Foundation. |
||||
|
||||
'Defensive Action' means a legal proceeding or claim that We bring |
||||
against you in response to a prior proceeding or claim initiated by |
||||
you or your affiliate. |
||||
|
||||
'We' means each contributor to this repository as of the date of |
||||
inclusion of this file, including subsidiaries of a corporate |
||||
contributor. |
||||
|
||||
This work is available under a Creative Commons Attribution-ShareAlike |
||||
4.0 International license (https://creativecommons.org/licenses/by-sa/4.0/). |
@ -0,0 +1,230 @@ |
||||
[![SWUbanner](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://supportukrainenow.org/) |
||||
|
||||
![PHPMailer](https://raw.github.com/PHPMailer/PHPMailer/master/examples/images/phpmailer.png) |
||||
|
||||
# PHPMailer – A full-featured email creation and transfer class for PHP |
||||
|
||||
[![Test status](https://github.com/PHPMailer/PHPMailer/workflows/Tests/badge.svg)](https://github.com/PHPMailer/PHPMailer/actions) |
||||
[![codecov.io](https://codecov.io/gh/PHPMailer/PHPMailer/branch/master/graph/badge.svg?token=iORZpwmYmM)](https://codecov.io/gh/PHPMailer/PHPMailer) |
||||
[![Latest Stable Version](https://poser.pugx.org/phpmailer/phpmailer/v/stable.svg)](https://packagist.org/packages/phpmailer/phpmailer) |
||||
[![Total Downloads](https://poser.pugx.org/phpmailer/phpmailer/downloads)](https://packagist.org/packages/phpmailer/phpmailer) |
||||
[![License](https://poser.pugx.org/phpmailer/phpmailer/license.svg)](https://packagist.org/packages/phpmailer/phpmailer) |
||||
[![API Docs](https://github.com/phpmailer/phpmailer/workflows/Docs/badge.svg)](https://phpmailer.github.io/PHPMailer/) |
||||
[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/PHPMailer/PHPMailer/badge)](https://api.securityscorecards.dev/projects/github.com/PHPMailer/PHPMailer) |
||||
|
||||
## Features |
||||
- Probably the world's most popular code for sending email from PHP! |
||||
- Used by many open-source projects: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! and many more |
||||
- Integrated SMTP support – send without a local mail server |
||||
- Send emails with multiple To, CC, BCC, and Reply-to addresses |
||||
- Multipart/alternative emails for mail clients that do not read HTML email |
||||
- Add attachments, including inline |
||||
- Support for UTF-8 content and 8bit, base64, binary, and quoted-printable encodings |
||||
- SMTP authentication with LOGIN, PLAIN, CRAM-MD5, and XOAUTH2 mechanisms over SMTPS and SMTP+STARTTLS transports |
||||
- Validates email addresses automatically |
||||
- Protects against header injection attacks |
||||
- Error messages in over 50 languages! |
||||
- DKIM and S/MIME signing support |
||||
- Compatible with PHP 5.5 and later, including PHP 8.2 |
||||
- Namespaced to prevent name clashes |
||||
- Much more! |
||||
|
||||
## Why you might need it |
||||
Many PHP developers need to send email from their code. The only PHP function that supports this directly is [`mail()`](https://www.php.net/manual/en/function.mail.php). However, it does not provide any assistance for making use of popular features such as encryption, authentication, HTML messages, and attachments. |
||||
|
||||
Formatting email correctly is surprisingly difficult. There are myriad overlapping (and conflicting) standards, requiring tight adherence to horribly complicated formatting and encoding rules – the vast majority of code that you'll find online that uses the `mail()` function directly is just plain wrong, if not unsafe! |
||||
|
||||
The PHP `mail()` function usually sends via a local mail server, typically fronted by a `sendmail` binary on Linux, BSD, and macOS platforms, however, Windows usually doesn't include a local mail server; PHPMailer's integrated SMTP client allows email sending on all platforms without needing a local mail server. Be aware though, that the `mail()` function should be avoided when possible; it's both faster and [safer](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html) to use SMTP to localhost. |
||||
|
||||
*Please* don't be tempted to do it yourself – if you don't use PHPMailer, there are many other excellent libraries that |
||||
you should look at before rolling your own. Try [SwiftMailer](https://swiftmailer.symfony.com/) |
||||
, [Laminas/Mail](https://docs.laminas.dev/laminas-mail/), [ZetaComponents](https://github.com/zetacomponents/Mail), etc. |
||||
|
||||
## License |
||||
This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read [LICENSE](https://github.com/PHPMailer/PHPMailer/blob/master/LICENSE) for information on the software availability and distribution. |
||||
|
||||
## Installation & loading |
||||
PHPMailer is available on [Packagist](https://packagist.org/packages/phpmailer/phpmailer) (using semantic versioning), and installation via [Composer](https://getcomposer.org) is the recommended way to install PHPMailer. Just add this line to your `composer.json` file: |
||||
|
||||
```json |
||||
"phpmailer/phpmailer": "^6.8.0" |
||||
``` |
||||
|
||||
or run |
||||
|
||||
```sh |
||||
composer require phpmailer/phpmailer |
||||
``` |
||||
|
||||
Note that the `vendor` folder and the `vendor/autoload.php` script are generated by Composer; they are not part of PHPMailer. |
||||
|
||||
If you want to use the Gmail XOAUTH2 authentication class, you will also need to add a dependency on the `league/oauth2-client` package in your `composer.json`. |
||||
|
||||
Alternatively, if you're not using Composer, you |
||||
can [download PHPMailer as a zip file](https://github.com/PHPMailer/PHPMailer/archive/master.zip), (note that docs and examples are not included in the zip file), then copy the contents of the PHPMailer folder into one of the `include_path` directories specified in your PHP configuration and load each class file manually: |
||||
|
||||
```php |
||||
<?php |
||||
use PHPMailer\PHPMailer\PHPMailer; |
||||
use PHPMailer\PHPMailer\Exception; |
||||
|
||||
require 'path/to/PHPMailer/src/Exception.php'; |
||||
require 'path/to/PHPMailer/src/PHPMailer.php'; |
||||
require 'path/to/PHPMailer/src/SMTP.php'; |
||||
``` |
||||
|
||||
If you're not using the `SMTP` class explicitly (you're probably not), you don't need a `use` line for the SMTP class. Even if you're not using exceptions, you do still need to load the `Exception` class as it is used internally. |
||||
|
||||
## Legacy versions |
||||
PHPMailer 5.2 (which is compatible with PHP 5.0 — 7.0) is no longer supported, even for security updates. You will find the latest version of 5.2 in the [5.2-stable branch](https://github.com/PHPMailer/PHPMailer/tree/5.2-stable). If you're using PHP 5.5 or later (which you should be), switch to the 6.x releases. |
||||
|
||||
### Upgrading from 5.2 |
||||
The biggest changes are that source files are now in the `src/` folder, and PHPMailer now declares the namespace `PHPMailer\PHPMailer`. This has several important effects – [read the upgrade guide](https://github.com/PHPMailer/PHPMailer/tree/master/UPGRADING.md) for more details. |
||||
|
||||
### Minimal installation |
||||
While installing the entire package manually or with Composer is simple, convenient, and reliable, you may want to include only vital files in your project. At the very least you will need [src/PHPMailer.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/PHPMailer.php). If you're using SMTP, you'll need [src/SMTP.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/SMTP.php), and if you're using POP-before SMTP (*very* unlikely!), you'll need [src/POP3.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/POP3.php). You can skip the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder if you're not showing errors to users and can make do with English-only errors. If you're using XOAUTH2 you will need [src/OAuth.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/OAuth.php) as well as the Composer dependencies for the services you wish to authenticate with. Really, it's much easier to use Composer! |
||||
|
||||
## A Simple Example |
||||
|
||||
```php |
||||
<?php |
||||
//Import PHPMailer classes into the global namespace |
||||
//These must be at the top of your script, not inside a function |
||||
use PHPMailer\PHPMailer\PHPMailer; |
||||
use PHPMailer\PHPMailer\SMTP; |
||||
use PHPMailer\PHPMailer\Exception; |
||||
|
||||
//Load Composer's autoloader |
||||
require 'vendor/autoload.php'; |
||||
|
||||
//Create an instance; passing `true` enables exceptions |
||||
$mail = new PHPMailer(true); |
||||
|
||||
try { |
||||
//Server settings |
||||
$mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output |
||||
$mail->isSMTP(); //Send using SMTP |
||||
$mail->Host = 'smtp.example.com'; //Set the SMTP server to send through |
||||
$mail->SMTPAuth = true; //Enable SMTP authentication |
||||
$mail->Username = 'user@example.com'; //SMTP username |
||||
$mail->Password = 'secret'; //SMTP password |
||||
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //Enable implicit TLS encryption |
||||
$mail->Port = 465; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS` |
||||
|
||||
//Recipients |
||||
$mail->setFrom('from@example.com', 'Mailer'); |
||||
$mail->addAddress('joe@example.net', 'Joe User'); //Add a recipient |
||||
$mail->addAddress('ellen@example.com'); //Name is optional |
||||
$mail->addReplyTo('info@example.com', 'Information'); |
||||
$mail->addCC('cc@example.com'); |
||||
$mail->addBCC('bcc@example.com'); |
||||
|
||||
//Attachments |
||||
$mail->addAttachment('/var/tmp/file.tar.gz'); //Add attachments |
||||
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); //Optional name |
||||
|
||||
//Content |
||||
$mail->isHTML(true); //Set email format to HTML |
||||
$mail->Subject = 'Here is the subject'; |
||||
$mail->Body = 'This is the HTML message body <b>in bold!</b>'; |
||||
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; |
||||
|
||||
$mail->send(); |
||||
echo 'Message has been sent'; |
||||
} catch (Exception $e) { |
||||
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; |
||||
} |
||||
``` |
||||
|
||||
You'll find plenty to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder, which covers many common scenarios including sending through Gmail, building contact forms, sending to mailing lists, and more. |
||||
|
||||
If you are re-using the instance (e.g. when sending to a mailing list), you may need to clear the recipient list to avoid sending duplicate messages. See [the mailing list example](https://github.com/PHPMailer/PHPMailer/blob/master/examples/mailing_list.phps) for further guidance. |
||||
|
||||
That's it. You should now be ready to use PHPMailer! |
||||
|
||||
## Localization |
||||
PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder, you'll find many translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this: |
||||
|
||||
```php |
||||
//To load the French version |
||||
$mail->setLanguage('fr', '/optional/path/to/language/directory/'); |
||||
``` |
||||
|
||||
We welcome corrections and new languages – if you're looking for corrections, run the [PHPMailerLangTest.php](https://github.com/PHPMailer/PHPMailer/tree/master/test/PHPMailerLangTest.php) script in the tests folder and it will show any missing translations. |
||||
|
||||
## Documentation |
||||
Start reading at the [GitHub wiki](https://github.com/PHPMailer/PHPMailer/wiki). If you're having trouble, head for [the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting) as it's frequently updated. |
||||
|
||||
Examples of how to use PHPMailer for common scenarios can be found in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder. If you're looking for a good starting point, we recommend you start with [the Gmail example](https://github.com/PHPMailer/PHPMailer/tree/master/examples/gmail.phps). |
||||
|
||||
To reduce PHPMailer's deployed code footprint, examples are not included if you load PHPMailer via Composer or via [GitHub's zip file download](https://github.com/PHPMailer/PHPMailer/archive/master.zip), so you'll need to either clone the git repository or use the above links to get to the examples directly. |
||||
|
||||
Complete generated API documentation is [available online](https://phpmailer.github.io/PHPMailer/). |
||||
|
||||
You can generate complete API-level documentation by running `phpdoc` in the top-level folder, and documentation will appear in the `docs` folder, though you'll need to have [PHPDocumentor](http://www.phpdoc.org) installed. You may find [the unit tests](https://github.com/PHPMailer/PHPMailer/blob/master/test/PHPMailerTest.php) a good reference for how to do various operations such as encryption. |
||||
|
||||
If the documentation doesn't cover what you need, search the [many questions on Stack Overflow](http://stackoverflow.com/questions/tagged/phpmailer), and before you ask a question about "SMTP Error: Could not connect to SMTP host.", [read the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting). |
||||
|
||||
## Tests |
||||
[PHPMailer tests](https://github.com/PHPMailer/PHPMailer/tree/master/test/) use PHPUnit 9, with [a polyfill](https://github.com/Yoast/PHPUnit-Polyfills) to let 9-style tests run on older PHPUnit and PHP versions. |
||||
|
||||
[![Test status](https://github.com/PHPMailer/PHPMailer/workflows/Tests/badge.svg)](https://github.com/PHPMailer/PHPMailer/actions) |
||||
|
||||
If this isn't passing, is there something you can do to help? |
||||
|
||||
## Security |
||||
Please disclose any vulnerabilities found responsibly – report security issues to the maintainers privately. |
||||
|
||||
See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) and [PHPMailer's security advisories on GitHub](https://github.com/PHPMailer/PHPMailer/security). |
||||
|
||||
## Contributing |
||||
Please submit bug reports, suggestions, and pull requests to the [GitHub issue tracker](https://github.com/PHPMailer/PHPMailer/issues). |
||||
|
||||
We're particularly interested in fixing edge cases, expanding test coverage, and updating translations. |
||||
|
||||
If you found a mistake in the docs, or want to add something, go ahead and amend the wiki – anyone can edit it. |
||||
|
||||
If you have git clones from prior to the move to the PHPMailer GitHub organisation, you'll need to update any remote URLs referencing the old GitHub location with a command like this from within your clone: |
||||
|
||||
```sh |
||||
git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git |
||||
``` |
||||
|
||||
Please *don't* use the SourceForge or Google Code projects any more; they are obsolete and no longer maintained. |
||||
|
||||
## Sponsorship |
||||
Development time and resources for PHPMailer are provided by [Smartmessages.net](https://info.smartmessages.net/), the world's only privacy-first email marketing system. |
||||
|
||||
<a href="https://info.smartmessages.net/"><img src="https://www.smartmessages.net/img/smartmessages-logo.svg" width="550" alt="Smartmessages.net privacy-first email marketing logo"></a> |
||||
|
||||
Donations are very welcome, whether in beer 🍺, T-shirts 👕, or cold, hard cash 💰. Sponsorship through GitHub is a simple and convenient way to say "thank you" to PHPMailer's maintainers and contributors – just click the "Sponsor" button [on the project page](https://github.com/PHPMailer/PHPMailer). If your company uses PHPMailer, consider taking part in Tidelift's enterprise support programme. |
||||
|
||||
## PHPMailer For Enterprise |
||||
|
||||
Available as part of the Tidelift Subscription. |
||||
|
||||
The maintainers of PHPMailer and thousands of other packages are working with Tidelift to deliver commercial |
||||
support and maintenance for the open-source packages you use to build your applications. Save time, reduce risk, and |
||||
improve code health, while paying the maintainers of the exact packages you |
||||
use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-phpmailer-phpmailer?utm_source=packagist-phpmailer-phpmailer&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) |
||||
|
||||
## Changelog |
||||
See [changelog](changelog.md). |
||||
|
||||
## History |
||||
- PHPMailer was originally written in 2001 by Brent R. Matzelle as a [SourceForge project](http://sourceforge.net/projects/phpmailer/). |
||||
- [Marcus Bointon](https://github.com/Synchro) (`coolbru` on SF) and Andy Prevost (`codeworxtech`) took over the project in 2004. |
||||
- Became an Apache incubator project on Google Code in 2010, managed by Jim Jagielski. |
||||
- Marcus created [his fork on GitHub](https://github.com/Synchro/PHPMailer) in 2008. |
||||
- Jim and Marcus decide to join forces and use GitHub as the canonical and official repo for PHPMailer in 2013. |
||||
- PHPMailer moves to [the PHPMailer organisation](https://github.com/PHPMailer) on GitHub in 2013. |
||||
|
||||
### What's changed since moving from SourceForge? |
||||
- Official successor to the SourceForge and Google Code projects. |
||||
- Test suite. |
||||
- Continuous integration with GitHub Actions. |
||||
- Composer support. |
||||
- Public development. |
||||
- Additional languages and language strings. |
||||
- CRAM-MD5 authentication support. |
||||
- Preserves full repo history of authors, commits, and branches from the original SourceForge project. |
@ -0,0 +1,37 @@ |
||||
# Security notices relating to PHPMailer |
||||
|
||||
Please disclose any security issues or vulnerabilities found through [Tidelift's coordinated disclosure system](https://tidelift.com/security) or to the maintainers privately. |
||||
|
||||
PHPMailer 6.4.1 and earlier contain a vulnerability that can result in untrusted code being called (if such code is injected into the host project's scope by other means). If the `$patternselect` parameter to `validateAddress()` is set to `'php'` (the default, defined by `PHPMailer::$validator`), and the global namespace contains a function called `php`, it will be called in preference to the built-in validator of the same name. Mitigated in PHPMailer 6.5.0 by denying the use of simple strings as validator function names. Recorded as [CVE-2021-3603](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2021-3603). Reported by [Vikrant Singh Chauhan](mailto:vi@hackberry.xyz) via [huntr.dev](https://www.huntr.dev/). |
||||
|
||||
PHPMailer versions 6.4.1 and earlier contain a possible remote code execution vulnerability through the `$lang_path` parameter of the `setLanguage()` method. If the `$lang_path` parameter is passed unfiltered from user input, it can be set to [a UNC path](https://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats#unc-paths), and if an attacker is also able to persuade the server to load a file from that UNC path, a script file under their control may be executed. This vulnerability only applies to systems that resolve UNC paths, typically only Microsoft Windows. |
||||
PHPMailer 6.5.0 mitigates this by no longer treating translation files as PHP code, but by parsing their text content directly. This approach avoids the possibility of executing unknown code while retaining backward compatibility. This isn't ideal, so the current translation format is deprecated and will be replaced in the next major release. Recorded as [CVE-2021-34551](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2021-34551). Reported by [Jilin Diting Information Technology Co., Ltd](https://listensec.com) via Tidelift. |
||||
|
||||
PHPMailer versions between 6.1.8 and 6.4.0 contain a regression of the earlier CVE-2018-19296 object injection vulnerability as a result of [a fix for Windows UNC paths in 6.1.8](https://github.com/PHPMailer/PHPMailer/commit/e2e07a355ee8ff36aba21d0242c5950c56e4c6f9). Recorded as [CVE-2020-36326](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2020-36326). Reported by Fariskhi Vidyan via Tidelift. 6.4.1 fixes this issue, and also enforces stricter checks for URL schemes in local path contexts. |
||||
|
||||
PHPMailer versions 6.1.5 and earlier contain an output escaping bug that occurs in `Content-Type` and `Content-Disposition` when filenames passed into `addAttachment` and other methods that accept attachment names contain double quote characters, in contravention of RFC822 3.4.1. No specific vulnerability has been found relating to this, but it could allow file attachments to bypass attachment filters that are based on matching filename extensions. Recorded as [CVE-2020-13625](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2020-13625). Reported by Elar Lang of Clarified Security. |
||||
|
||||
PHPMailer versions prior to 6.0.6 and 5.2.27 are vulnerable to an object injection attack by passing `phar://` paths into `addAttachment()` and other functions that may receive unfiltered local paths, possibly leading to RCE. Recorded as [CVE-2018-19296](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2018-19296). See [this article](https://knasmueller.net/5-answers-about-php-phar-exploitation) for more info on this type of vulnerability. Mitigated by blocking the use of paths containing URL-protocol style prefixes such as `phar://`. Reported by Sehun Oh of cyberone.kr. |
||||
|
||||
PHPMailer versions prior to 5.2.24 (released July 26th 2017) have an XSS vulnerability in one of the code examples, [CVE-2017-11503](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-11503). The `code_generator.phps` example did not filter user input prior to output. This file is distributed with a `.phps` extension, so it it not normally executable unless it is explicitly renamed, and the file is not included when PHPMailer is loaded through composer, so it is safe by default. There was also an undisclosed potential XSS vulnerability in the default exception handler (unused by default). Patches for both issues kindly provided by Patrick Monnerat of the Fedora Project. |
||||
|
||||
PHPMailer versions prior to 5.2.22 (released January 9th 2017) have a local file disclosure vulnerability, [CVE-2017-5223](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-5223). If content passed into `msgHTML()` is sourced from unfiltered user input, relative paths can map to absolute local file paths and added as attachments. Also note that `addAttachment` (just like `file_get_contents`, `passthru`, `unlink`, etc) should not be passed user-sourced params either! Reported by Yongxiang Li of Asiasecurity. |
||||
|
||||
PHPMailer versions prior to 5.2.20 (released December 28th 2016) are vulnerable to [CVE-2016-10045](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10045) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10045-Vuln-Patch-Bypass.html), and patched by Paul Buonopane (@Zenexer). |
||||
|
||||
PHPMailer versions prior to 5.2.18 (released December 2016) are vulnerable to [CVE-2016-10033](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10033) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](http://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html). |
||||
|
||||
PHPMailer versions prior to 5.2.14 (released November 2015) are vulnerable to [CVE-2015-8476](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-8476) an SMTP CRLF injection bug permitting arbitrary message sending. |
||||
|
||||
PHPMailer versions prior to 5.2.10 (released May 2015) are vulnerable to [CVE-2008-5619](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2008-5619), a remote code execution vulnerability in the bundled html2text library. This file was removed in 5.2.10, so if you are using a version prior to that and make use of the html2text function, it's vitally important that you upgrade and remove this file. |
||||
|
||||
PHPMailer versions prior to 2.0.7 and 2.2.1 are vulnerable to [CVE-2012-0796](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-0796), an email header injection attack. |
||||
|
||||
Joomla 1.6.0 uses PHPMailer in an unsafe way, allowing it to reveal local file paths, reported in [CVE-2011-3747](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-3747). |
||||
|
||||
PHPMailer didn't sanitise the `$lang_path` parameter in `SetLanguage`. This wasn't a problem in itself, but some apps (PHPClassifieds, ATutor) also failed to sanitise user-provided parameters passed to it, permitting semi-arbitrary local file inclusion, reported in [CVE-2010-4914](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-4914), [CVE-2007-2021](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-2021) and [CVE-2006-5734](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2006-5734). |
||||
|
||||
PHPMailer 1.7.2 and earlier contained a possible DDoS vulnerability reported in [CVE-2005-1807](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2005-1807). |
||||
|
||||
PHPMailer 1.7 and earlier (June 2003) have a possible vulnerability in the `SendmailSend` method where shell commands may not be sanitised. Reported in [CVE-2007-3215](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-3215). |
||||
|
@ -0,0 +1 @@ |
||||
6.8.0 |
@ -0,0 +1,78 @@ |
||||
{ |
||||
"name": "phpmailer/phpmailer", |
||||
"type": "library", |
||||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP", |
||||
"authors": [ |
||||
{ |
||||
"name": "Marcus Bointon", |
||||
"email": "phpmailer@synchromedia.co.uk" |
||||
}, |
||||
{ |
||||
"name": "Jim Jagielski", |
||||
"email": "jimjag@gmail.com" |
||||
}, |
||||
{ |
||||
"name": "Andy Prevost", |
||||
"email": "codeworxtech@users.sourceforge.net" |
||||
}, |
||||
{ |
||||
"name": "Brent R. Matzelle" |
||||
} |
||||
], |
||||
"funding": [ |
||||
{ |
||||
"url": "https://github.com/Synchro", |
||||
"type": "github" |
||||
} |
||||
], |
||||
"config": { |
||||
"allow-plugins": { |
||||
"dealerdirect/phpcodesniffer-composer-installer": true |
||||
} |
||||
}, |
||||
"require": { |
||||
"php": ">=5.5.0", |
||||
"ext-ctype": "*", |
||||
"ext-filter": "*", |
||||
"ext-hash": "*" |
||||
}, |
||||
"require-dev": { |
||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.2", |
||||
"doctrine/annotations": "^1.2.6 || ^1.13.3", |
||||
"php-parallel-lint/php-console-highlighter": "^1.0.0", |
||||
"php-parallel-lint/php-parallel-lint": "^1.3.2", |
||||
"phpcompatibility/php-compatibility": "^9.3.5", |
||||
"roave/security-advisories": "dev-latest", |
||||
"squizlabs/php_codesniffer": "^3.7.1", |
||||
"yoast/phpunit-polyfills": "^1.0.4" |
||||
}, |
||||
"suggest": { |
||||
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", |
||||
"ext-openssl": "Needed for secure SMTP sending and DKIM signing", |
||||
"greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication", |
||||
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", |
||||
"league/oauth2-google": "Needed for Google XOAUTH2 authentication", |
||||
"psr/log": "For optional PSR-3 debug logging", |
||||
"thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication", |
||||
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" |
||||
}, |
||||
"autoload": { |
||||
"psr-4": { |
||||
"PHPMailer\\PHPMailer\\": "src/" |
||||
} |
||||
}, |
||||
"autoload-dev": { |
||||
"psr-4": { |
||||
"PHPMailer\\Test\\": "test/" |
||||
} |
||||
}, |
||||
"license": "LGPL-2.1-only", |
||||
"scripts": { |
||||
"check": "./vendor/bin/phpcs", |
||||
"test": "./vendor/bin/phpunit --no-coverage", |
||||
"coverage": "./vendor/bin/phpunit", |
||||
"lint": [ |
||||
"@php ./vendor/php-parallel-lint/php-parallel-lint/parallel-lint . --show-deprecated -e php,phps --exclude vendor --exclude .git --exclude build" |
||||
] |
||||
} |
||||
} |
@ -0,0 +1,182 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* PHPMailer - PHP email creation and transport class. |
||||
* PHP Version 5.5 |
||||
* @package PHPMailer |
||||
* @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project |
||||
* @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk> |
||||
* @author Jim Jagielski (jimjag) <jimjag@gmail.com> |
||||
* @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net> |
||||
* @author Brent R. Matzelle (original founder) |
||||
* @copyright 2012 - 2020 Marcus Bointon |
||||
* @copyright 2010 - 2012 Jim Jagielski |
||||
* @copyright 2004 - 2009 Andy Prevost |
||||
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License |
||||
* @note This program is distributed in the hope that it will be useful - WITHOUT |
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
||||
* FITNESS FOR A PARTICULAR PURPOSE. |
||||
*/ |
||||
|
||||
/** |
||||
* Get an OAuth2 token from an OAuth2 provider. |
||||
* * Install this script on your server so that it's accessible |
||||
* as [https/http]://<yourdomain>/<folder>/get_oauth_token.php |
||||
* e.g.: http://localhost/phpmailer/get_oauth_token.php |
||||
* * Ensure dependencies are installed with 'composer install' |
||||
* * Set up an app in your Google/Yahoo/Microsoft account |
||||
* * Set the script address as the app's redirect URL |
||||
* If no refresh token is obtained when running this file, |
||||
* revoke access to your app and run the script again. |
||||
*/ |
||||
|
||||
namespace PHPMailer\PHPMailer; |
||||
|
||||
/** |
||||
* Aliases for League Provider Classes |
||||
* Make sure you have added these to your composer.json and run `composer install` |
||||
* Plenty to choose from here: |
||||
* @see http://oauth2-client.thephpleague.com/providers/thirdparty/ |
||||
*/ |
||||
//@see https://github.com/thephpleague/oauth2-google |
||||
use League\OAuth2\Client\Provider\Google; |
||||
//@see https://packagist.org/packages/hayageek/oauth2-yahoo |
||||
use Hayageek\OAuth2\Client\Provider\Yahoo; |
||||
//@see https://github.com/stevenmaguire/oauth2-microsoft |
||||
use Stevenmaguire\OAuth2\Client\Provider\Microsoft; |
||||
//@see https://github.com/greew/oauth2-azure-provider |
||||
use Greew\OAuth2\Client\Provider\Azure; |
||||
|
||||
if (!isset($_GET['code']) && !isset($_POST['provider'])) { |
||||
?> |
||||
<html> |
||||
<body> |
||||
<form method="post"> |
||||
<h1>Select Provider</h1> |
||||
<input type="radio" name="provider" value="Google" id="providerGoogle"> |
||||
<label for="providerGoogle">Google</label><br> |
||||
<input type="radio" name="provider" value="Yahoo" id="providerYahoo"> |
||||
<label for="providerYahoo">Yahoo</label><br> |
||||
<input type="radio" name="provider" value="Microsoft" id="providerMicrosoft"> |
||||
<label for="providerMicrosoft">Microsoft</label><br> |
||||
<input type="radio" name="provider" value="Azure" id="providerAzure"> |
||||
<label for="providerAzure">Azure</label><br> |
||||
<h1>Enter id and secret</h1> |
||||
<p>These details are obtained by setting up an app in your provider's developer console. |
||||
</p> |
||||
<p>ClientId: <input type="text" name="clientId"><p> |
||||
<p>ClientSecret: <input type="text" name="clientSecret"></p> |
||||
<p>TenantID (only relevant for Azure): <input type="text" name="tenantId"></p> |
||||
<input type="submit" value="Continue"> |
||||
</form> |
||||
</body> |
||||
</html> |
||||
<?php |
||||
exit; |
||||
} |
||||
|
||||
require 'vendor/autoload.php'; |
||||
|
||||
session_start(); |
||||
|
||||
$providerName = ''; |
||||
$clientId = ''; |
||||
$clientSecret = ''; |
||||
$tenantId = ''; |
||||
|
||||
if (array_key_exists('provider', $_POST)) { |
||||
$providerName = $_POST['provider']; |
||||
$clientId = $_POST['clientId']; |
||||
$clientSecret = $_POST['clientSecret']; |
||||
$tenantId = $_POST['tenantId']; |
||||
$_SESSION['provider'] = $providerName; |
||||
$_SESSION['clientId'] = $clientId; |
||||
$_SESSION['clientSecret'] = $clientSecret; |
||||
$_SESSION['tenantId'] = $tenantId; |
||||
} elseif (array_key_exists('provider', $_SESSION)) { |
||||
$providerName = $_SESSION['provider']; |
||||
$clientId = $_SESSION['clientId']; |
||||
$clientSecret = $_SESSION['clientSecret']; |
||||
$tenantId = $_SESSION['tenantId']; |
||||
} |
||||
|
||||
//If you don't want to use the built-in form, set your client id and secret here |
||||
//$clientId = 'RANDOMCHARS-----duv1n2.apps.googleusercontent.com'; |
||||
//$clientSecret = 'RANDOMCHARS-----lGyjPcRtvP'; |
||||
|
||||
//If this automatic URL doesn't work, set it yourself manually to the URL of this script |
||||
$redirectUri = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; |
||||
//$redirectUri = 'http://localhost/PHPMailer/redirect'; |
||||
|
||||
$params = [ |
||||
'clientId' => $clientId, |
||||
'clientSecret' => $clientSecret, |
||||
'redirectUri' => $redirectUri, |
||||
'accessType' => 'offline' |
||||
]; |
||||
|
||||
$options = []; |
||||
$provider = null; |
||||
|
||||
switch ($providerName) { |
||||
case 'Google': |
||||
$provider = new Google($params); |
||||
$options = [ |
||||
'scope' => [ |
||||
'https://mail.google.com/' |
||||
] |
||||
]; |
||||
break; |
||||
case 'Yahoo': |
||||
$provider = new Yahoo($params); |
||||
break; |
||||
case 'Microsoft': |
||||
$provider = new Microsoft($params); |
||||
$options = [ |
||||
'scope' => [ |
||||
'wl.imap', |
||||
'wl.offline_access' |
||||
] |
||||
]; |
||||
break; |
||||
case 'Azure': |
||||
$params['tenantId'] = $tenantId; |
||||
|
||||
$provider = new Azure($params); |
||||
$options = [ |
||||
'scope' => [ |
||||
'https://outlook.office.com/SMTP.Send', |
||||
'offline_access' |
||||
] |
||||
]; |
||||
break; |
||||
} |
||||
|
||||
if (null === $provider) { |
||||
exit('Provider missing'); |
||||
} |
||||
|
||||
if (!isset($_GET['code'])) { |
||||
//If we don't have an authorization code then get one |
||||
$authUrl = $provider->getAuthorizationUrl($options); |
||||
$_SESSION['oauth2state'] = $provider->getState(); |
||||
header('Location: ' . $authUrl); |
||||
exit; |
||||
//Check given state against previously stored one to mitigate CSRF attack |
||||
} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) { |
||||
unset($_SESSION['oauth2state']); |
||||
unset($_SESSION['provider']); |
||||
exit('Invalid state'); |
||||
} else { |
||||
unset($_SESSION['provider']); |
||||
//Try to get an access token (using the authorization code grant) |
||||
$token = $provider->getAccessToken( |
||||
'authorization_code', |
||||
[ |
||||
'code' => $_GET['code'] |
||||
] |
||||
); |
||||
//Use this to interact with an API on the users behalf |
||||
//Use this to get a new access token if the old one expires |
||||
echo 'Refresh Token: ', $token->getRefreshToken(); |
||||
} |
@ -0,0 +1,26 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* Afrikaans PHPMailer language file: refer to English translation for definitive list |
||||
* @package PHPMailer |
||||
*/ |
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'SMTP-fout: kon nie geverifieer word nie.'; |
||||
$PHPMAILER_LANG['connect_host'] = 'SMTP-fout: kon nie aan SMTP-verbind nie.'; |
||||
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP-fout: data nie aanvaar nie.'; |
||||
$PHPMAILER_LANG['empty_message'] = 'Boodskapliggaam leeg.'; |
||||
$PHPMAILER_LANG['encoding'] = 'Onbekende kodering: '; |
||||
$PHPMAILER_LANG['execute'] = 'Kon nie uitvoer nie: '; |
||||
$PHPMAILER_LANG['file_access'] = 'Kon nie lêer oopmaak nie: '; |
||||
$PHPMAILER_LANG['file_open'] = 'Lêerfout: Kon nie lêer oopmaak nie: '; |
||||
$PHPMAILER_LANG['from_failed'] = 'Die volgende Van adres misluk: '; |
||||
$PHPMAILER_LANG['instantiate'] = 'Kon nie posfunksie instansieer nie.'; |
||||
$PHPMAILER_LANG['invalid_address'] = 'Ongeldige adres: '; |
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer word nie ondersteun nie.'; |
||||
$PHPMAILER_LANG['provide_address'] = 'U moet ten minste een ontvanger e-pos adres verskaf.'; |
||||
$PHPMAILER_LANG['recipients_failed'] = 'SMTP-fout: Die volgende ontvangers het misluk: '; |
||||
$PHPMAILER_LANG['signing'] = 'Ondertekening Fout: '; |
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP-verbinding () misluk.'; |
||||
$PHPMAILER_LANG['smtp_error'] = 'SMTP-bediener fout: '; |
||||
$PHPMAILER_LANG['variable_set'] = 'Kan nie veranderlike instel of herstel nie: '; |
||||
$PHPMAILER_LANG['extension_missing'] = 'Uitbreiding ontbreek: '; |