# Mailpit

> A Mailpit egy helyi levélelkapó: SMTP-szerverként fogadja a leveleket, és webes felületen mutatja őket, így a WordPress levelei nem érnek el valódi címzettet.

A [Mailpit](https://mailpit.axllent.org/) egy kis SMTP-szerver, webes felülettel és API-val. Minden levelet elfog, amit hozzá küldenek, eltárolja, és megmutatja a böngészőben. Fejlesztésnél ezért ideális: a WordPress `wp_mail()` hívásai kimehetnek, de valódi vásárlóhoz egyetlen levél sem jut el. Tipikus felhasználás a WooCommerce rendelési leveleinek kipróbálása.

## Telepítés

Alapértelmezésben a webes felület és az API a `8025`-ös, az SMTP a `1025`-ös porton figyel.

macOS-en Homebrew-val:

```bash title="Terminál"
brew install mailpit
brew services start mailpit
```

Linuxon és macOS-en a telepítő szkripttel (a `/usr/local/bin/mailpit` helyre kerül):

```bash title="Terminál"
sudo sh < <(curl -sL https://raw.githubusercontent.com/axllent/mailpit/develop/install.sh)
```

Dockerrel:

```bash title="Terminál"
docker run -d \
  --restart unless-stopped \
  --name=mailpit \
  -p 8025:8025 \
  -p 1025:1025 \
  axllent/mailpit
```

Ha a levelek nem tűnhetnek el a leállítással, adj meg adatbázisfájlt. Enélkül a Mailpit ideiglenes fájlt használ, amit kilépéskor töröl.

## Indítás és beállítás

A telepítés után a `mailpit` paranccsal indítod. Ezután a `http://localhost:8025` címen nyílik a felület.

A legfontosabb beállítások kapcsolóval vagy környezeti változóval adhatók meg:

| Kapcsoló | Környezeti változó | Alapérték | Mit csinál |
|---|---|---|---|
| `--listen` | `MP_UI_BIND_ADDR` | `0.0.0.0:8025` | a webes felület és az API címe |
| `--smtp` | `MP_SMTP_BIND_ADDR` | `0.0.0.0:1025` | az SMTP címe |
| `--database` | `MP_DATABASE` | ideiglenes fájl | tartós adatbázisfájl |
| `--max` | `MP_MAX_MESSAGES` | `500` | a tárolt levelek maximuma, a régebbieket törli. A `0` kikapcsolja a törlést. |

Példa: csak a saját gépedről érhető el, és megmaradnak a levelek.

```bash title="Terminál"
mailpit --listen 127.0.0.1:8025 --smtp 127.0.0.1:1025 --database ./mailpit.db
```

## A WordPress bekötése

A WordPress a `wp_mail()` függvénnyel küld, ami belül a PHPMailer osztályt használja. A [`phpmailer_init`](https://developer.wordpress.org/reference/hooks/phpmailer_init/) akció a PHPMailer előkészítése után fut le, és referenciaként átadja a példányt. Itt átállíthatod SMTP-re, és a Mailpitre irányíthatod.

Tedd a kódot must-use bővítménybe. A mu-plugin minden betöltéskor aktív, nem kapcsolható ki a felületről, és csak a `mu-plugins` mappa közvetlen PHP-fájljait tölti be a WordPress. Alapértelmezett helye a `wp-content/mu-plugins`, [Bedrockban](https://hub.hellowp.io/hu/knowledge-base/developer-tools/bedrock/) a `web/app/mu-plugins`.

```php title="mu-plugins/mailpit.php"
<?php
/**
 * Plugin Name: Mailpit
 * Description: A helyi levelek a Mailpitbe mennek.
 */

add_action( 'phpmailer_init', function ( $phpmailer ) {
    $phpmailer->isSMTP();
    $phpmailer->Host     = 'localhost';
    $phpmailer->Port     = 1025;
    $phpmailer->SMTPAuth = false;
} );
```

A `Host`, `Port`, `SMTPAuth` és `isSMTP()` ugyanazok a PHPMailer-tulajdonságok, mint a WordPress doksi SMTP-példájában. Ha a Mailpit másik gépen vagy konténerben fut, a `Host` értéke legyen annak a neve vagy címe.

Ha a kód csak fejlesztői környezetben fusson, tedd feltételhez. Bedrockban az `WP_ENV` állandó erre való:

```php title="mu-plugins/mailpit.php"
if ( defined( 'WP_ENV' ) && 'development' !== WP_ENV ) {
    return;
}
```

Próbálj ki egy levelet WP-CLI-vel:

```bash title="Terminál"
wp eval 'var_dump( wp_mail( "teszt@example.com", "Mailpit teszt", "Megjött?" ) );'
```

Ha a válasz `bool(true)`, a levélnek meg kell jelennie a Mailpit felületén.

## DDEV és Local

Ha DDEV-et vagy Localt használsz, nem kell saját Mailpitet telepítened és a fenti kódot sem kell megírnod.

- A [DDEV](https://hub.hellowp.io/hu/knowledge-base/developer-tools/ddev/) a helyi oldalról küldött leveleket a beépített Mailpitben fogja meg. Megnyitni: `ddev launch -m` vagy `ddev mailpit`.
- A [Local](https://hub.hellowp.io/hu/knowledge-base/developer-tools/localwp/) szintén Mailpitet használ. A leveleket a **Tools → Mailpit → Open Mailpit** gombbal nézheted meg.

## WooCommerce rendelési levelek kipróbálása

Ha a Mailpit fut és a WordPress rá van kötve:

1. Adj le tesztrendelést a webshopban.
2. Nyisd meg a Mailpit felületét (`http://localhost:8025`).
3. Nézd meg a rendelés visszaigazolását és az adminnak szóló értesítést: tárgyat, feladót, címzettet, a levél megjelenését.
4. Állítsd át a rendelés állapotát az adminban, és ellenőrizd a következő levelet is.

A felületen a leveleket HTML és szöveges nézetben is látod, a fejlécekkel együtt. Így kiderül, ha a sablon felülírása elrontotta a levél kinézetét, vagy rossz a feladó címe.

## API

A Mailpit REST API-ja a `/api/v1/` útvonalon érhető el, a dokumentációja a futó példányon is megnyílik: `http://localhost:8025/api/v1/`. Az útvonalak között van levéllista (`/api/v1/messages`), egy levél lekérése (`/api/v1/message/{ID}`), keresés (`/api/v1/search`) és törlés. Automatizált tesztből így ellenőrizheted, hogy kiment-e a levél.

```bash title="Terminál"
curl http://localhost:8025/api/v1/messages
```

A paraméterekért és a válasz szerkezetéért nézd a hivatalos [API-dokumentációt](https://mailpit.axllent.org/docs/api-v1/).

## Mire figyelj

- A Mailpit fejlesztői eszköz. Éles oldalon ne használd, mert a leveleket nem a címzettnek kézbesíti.
- Ne tedd elérhetővé az internetről: a leveleid érzékeny adatot tartalmazhatnak. Fejlesztői gépen a `127.0.0.1` címre köthetsz.
- Az ideiglenes adatbázis kilépéskor törlődik. Tartós tároláshoz add meg a `--database` kapcsolót.
- Az elfogott leveleket a Mailpit alapból legfeljebb 500-ig tárolja.

## Hasznos linkek

- [Mailpit dokumentáció](https://mailpit.axllent.org/docs/)
- [Telepítés](https://mailpit.axllent.org/docs/install/)
- [Futtatási beállítások](https://mailpit.axllent.org/docs/configuration/runtime-options/)
- [API v1](https://mailpit.axllent.org/docs/api-v1/)
- [Mailpit a GitHubon](https://github.com/axllent/mailpit)
- [A phpmailer_init hook](https://developer.wordpress.org/reference/hooks/phpmailer_init/)
- [Must-use bővítmények](https://developer.wordpress.org/advanced-administration/plugins/mu-plugins/)
