diff --git a/web/app/Jobs/StatusChangeDetection.php b/web/app/Jobs/StatusChangeDetection.php
index 5ab635c0e3367e6ede00fa9e1161fc044551e787..4a19937207a6d2d80b760cedba493c1f8763210c 100644
--- a/web/app/Jobs/StatusChangeDetection.php
+++ b/web/app/Jobs/StatusChangeDetection.php
@@ -11,6 +11,7 @@ use Illuminate\Queue\SerializesModels;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Support\Facades\Mail;
 
 class StatusChangeDetection implements ShouldQueue
 {
@@ -55,5 +56,9 @@ class StatusChangeDetection implements ShouldQueue
         $change->time = time();
         $change->status = $current_status;
         StatusChange::save($change);
+
+        foreach ($server->organization->users as $user) {
+            Mail::to($user)->send(new \App\Mail\StatusChanged($change));
+        }
     }
 }
diff --git a/web/app/Mail/StatusChanged.php b/web/app/Mail/StatusChanged.php
new file mode 100644
index 0000000000000000000000000000000000000000..851638dc9ab9ab6b66d5e24c71ac76df5f7f227e
--- /dev/null
+++ b/web/app/Mail/StatusChanged.php
@@ -0,0 +1,37 @@
+<?php
+
+namespace App\Mail;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Mail\Mailable;
+use Illuminate\Queue\SerializesModels;
+use Illuminate\Contracts\Queue\ShouldQueue;
+
+class StatusChanged extends Mailable
+{
+    use Queueable, SerializesModels;
+
+    private $change;
+
+    /**
+     * Create a new message instance.
+     *
+     * @return void
+     */
+    public function __construct(\App\StatusChange $change)
+    {
+        $this->change = $change;
+    }
+
+    /**
+     * Build the message.
+     *
+     * @return $this
+     */
+    public function build()
+    {
+        return $this->markdown('emails.server.status')
+                ->with(["change" => $this->change])
+                ->subject($this->change->server()->name . " : Status Change");
+    }
+}
diff --git a/web/app/Server.php b/web/app/Server.php
index bb3d62131e87ada7b8dae0e7ae99f210dff0f217..f0face9a2ad5df665b01aee552fe81bbb7bb2f78 100644
--- a/web/app/Server.php
+++ b/web/app/Server.php
@@ -224,4 +224,8 @@ class Server extends Model
     public function getChanges($count = 10) {
         return \App\StatusChange::getLastChangesForServer($this->id, $count);
     }
+
+    public static function id($id) : Server {
+        return self::where("id", $id)->first();
+    }
 }
diff --git a/web/app/StatusChange.php b/web/app/StatusChange.php
index 3ab7b641f2ccf845ea41f92aecea71746de886a9..896a10d312eb13e32a43beaa06eab424715a4705 100644
--- a/web/app/StatusChange.php
+++ b/web/app/StatusChange.php
@@ -38,6 +38,10 @@ class StatusChange {
         return Carbon::createFromTimestamp($this->time);
     }
 
+    public function server() : Server {
+        return Server::id($this->server_id);
+    }
+
     public static function save($status) {
         $data = [
             "time" => time(),
diff --git a/web/resources/views/emails/server/status.blade.php b/web/resources/views/emails/server/status.blade.php
new file mode 100644
index 0000000000000000000000000000000000000000..650ce3ef3c9fc7b02fbf1ce0198d8e3cac115b00
--- /dev/null
+++ b/web/resources/views/emails/server/status.blade.php
@@ -0,0 +1,10 @@
+@component('mail::message')
+# {{ $change->server()->name }} : status change
+
+Your server "{{ $change->server()->name }}" went to {!! $change->getStatusBadge() !!}
+
+{{ action("ServerController@show", ["server" => $change->server()]) }}
+
+
+{{ config('app.name') }}
+@endcomponent
diff --git a/web/tests/Unit/ExampleTest.php b/web/tests/Unit/ExampleTest.php
index 5a53824c0251bcbdd4445fd7a70db3743d674d89..6320418c71987a0c4f0f92ce12c3dd62821aa931 100644
--- a/web/tests/Unit/ExampleTest.php
+++ b/web/tests/Unit/ExampleTest.php
@@ -121,15 +121,30 @@ class ExampleTest extends TestCase
      * @group status-change
      */
     public function testStatusChangeDetection() {
+        $organization = new Organization();
+        $organization->name = "ACME";
+        $organization->save();
+
         $server = new \App\Server();
-        $server->id = 1;
+        $server->name = "My test server";
+        $server->organization()->associate($organization);
+        $server->save();
+
+        $server_id = $server->id;
+
+        $user = new User();
+        $user->name = "Test";
+        $user->email = "thibault.debatty@gmail.com";
+        $user->password = "qmlskdj";
+        $user->save();
+        $organization->users()->attach($user->id);
 
-        $this->assertEquals(1, \App\StatusChange::getLastChangeForServer(1)->server_id);
+        $this->assertEquals($server_id, \App\StatusChange::getLastChangeForServer(1)->server_id);
 
         // Insert a fake status change
         $change = new \App\StatusChange();
         $change->status = 155;
-        $change->server_id = 1;
+        $change->server_id = $server_id;
         \App\StatusChange::save($change);
 
         // Run change detection
@@ -137,7 +152,7 @@ class ExampleTest extends TestCase
         $change_detection_job->detectChangeForServer($server);
 
         // Check if a new StatusChange was inserted in Mongo
-        $last_change = \App\StatusChange::getLastChangeForServer(1);
+        $last_change = \App\StatusChange::getLastChangeForServer($server_id);
         $this->assertEquals(
                 $server->status(),
                 $last_change->status);