diff --git a/changelog.d/6097.bugfix b/changelog.d/6097.bugfix
new file mode 100644
index 0000000000000000000000000000000000000000..750a8ecf0a3bb6ae4498c87d1e9510030c3744af
--- /dev/null
+++ b/changelog.d/6097.bugfix
@@ -0,0 +1 @@
+Add sid to next_link for email validation.
diff --git a/synapse/handlers/identity.py b/synapse/handlers/identity.py
index 1f16afd14e3cc10ca14ebdeb6d221c0433956c2f..6d42a1aed81ccbe3dda83cbb9431a6eaa5b8872a 100644
--- a/synapse/handlers/identity.py
+++ b/synapse/handlers/identity.py
@@ -18,6 +18,7 @@
 """Utilities for interacting with Identity Servers"""
 
 import logging
+import urllib
 
 from canonicaljson import json
 
@@ -328,6 +329,15 @@ class IdentityHandler(BaseHandler):
             # Generate a session id
             session_id = random_string(16)
 
+        if next_link:
+            # Manipulate the next_link to add the sid, because the caller won't get
+            # it until we send a response, by which time we've sent the mail.
+            if "?" in next_link:
+                next_link += "&"
+            else:
+                next_link += "?"
+            next_link += "sid=" + urllib.parse.quote(session_id)
+
         # Generate a new validation token
         token = random_string(32)