diff --git a/app/mailers/emails/groups.rb b/app/mailers/emails/groups.rb
index 626eb593d51f4a871b7d6f8055fa5f7a948d0ff0..9db609006e0ce8f4c0ab190e3369357a96062cb4 100644
--- a/app/mailers/emails/groups.rb
+++ b/app/mailers/emails/groups.rb
@@ -5,8 +5,27 @@ module Emails
       @group = @group_member.group
       @target_url = group_url(@group)
       @current_user = @group_member.user
-      mail(to: @group_member.user.email,
+      mail(to: @group_member.user.notification_email,
            subject: subject("Access to group was granted"))
     end
+
+    def group_member_invited_email(group_member_id, token)
+      @group_member = GroupMember.find group_member_id
+      @group = @group_member.group
+      @token = token
+      @target_url = group_url(@group)
+      mail(to: @group_member.invite_email,
+           subject: "Invite to join group #{@group.name}")
+    end
+
+    def group_invite_accepted_email(group_member_id)
+      @group_member = GroupMember.find group_member_id
+      return if @group_member.created_by.nil?
+
+      @group = @group_member.group
+      @target_url = group_url(@group)
+      mail(to: @group_member.created_by.notification_email,
+           subject: subject("Invite accepted"))
+    end
   end
 end
diff --git a/app/mailers/emails/projects.rb b/app/mailers/emails/projects.rb
index 20a863c37425812198953cead783ab747d952b4e..64c35618a5289ca249afa6c0c5536b812c9cf347 100644
--- a/app/mailers/emails/projects.rb
+++ b/app/mailers/emails/projects.rb
@@ -1,14 +1,33 @@
 module Emails
   module Projects
-    def project_access_granted_email(user_project_id)
-      @project_member = ProjectMember.find user_project_id
+    def project_access_granted_email(project_member_id)
+      @project_member = ProjectMember.find project_member_id
       @project = @project_member.project
       @target_url = namespace_project_url(@project.namespace, @project)
       @current_user = @project_member.user
-      mail(to: @project_member.user.email,
+      mail(to: @project_member.user.notification_email,
            subject: subject("Access to project was granted"))
     end
 
+    def project_member_invited_email(project_member_id, token)
+      @project_member = ProjectMember.find project_member_id
+      @project = @project_member.project
+      @token = token
+      @target_url = namespace_project_url(@project.namespace, @project)
+      mail(to: @project_member.invite_email,
+           subject: "Invite to join project #{@project.name_with_namespace}")
+    end
+
+    def project_invite_accepted_email(project_member_id)
+      @project_member = ProjectMember.find project_member_id
+      return if @project_member.created_by.nil?
+
+      @project = @project_member.project
+      @target_url = namespace_project_url(@project.namespace, @project)
+      mail(to: @project_member.created_by.notification_email,
+           subject: subject("Invite accepted"))
+    end
+
     def project_was_moved_email(project_id, user_id)
       @current_user = @user = User.find user_id
       @project = Project.find project_id
diff --git a/app/models/members/group_member.rb b/app/models/members/group_member.rb
index ccbbab6afc5413aafed22c4da2645e11d361bbfc..68b7c169f7209f17b901f6ca94937d0c92f2cfca 100644
--- a/app/models/members/group_member.rb
+++ b/app/models/members/group_member.rb
@@ -41,6 +41,12 @@ class GroupMember < Member
 
   private
 
+  def send_invite
+    notification_service.invite_group_member(self, @raw_invite_token)
+
+    super
+  end
+
   def post_create_hook
     notification_service.new_group_member(self)
 
@@ -54,4 +60,10 @@ class GroupMember < Member
 
     super
   end
+
+  def after_accept_invite
+    notification_service.accept_group_invite(self)
+
+    super
+  end
 end
diff --git a/app/models/members/project_member.rb b/app/models/members/project_member.rb
index 6c5d161940d99ee6e6fd87e54f8ea39994d04cd5..a63d5af121936965793957987cd0cd8465802db4 100644
--- a/app/models/members/project_member.rb
+++ b/app/models/members/project_member.rb
@@ -116,6 +116,12 @@ class ProjectMember < Member
 
   private
 
+  def send_invite
+    notification_service.invite_project_member(self, @raw_invite_token)
+
+    super
+  end
+
   def post_create_hook
     unless owner?
       event_service.join_project(self.project, self.user)
@@ -139,6 +145,12 @@ class ProjectMember < Member
     super
   end
 
+  def after_accept_invite
+    notification_service.accept_project_invite(self)
+
+    super
+  end
+
   def event_service
     EventCreateService.new
   end
diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb
index 42547f6f48194ad8eea8c70f39c1d16f1b142045..a97abe289f5b3524d1c8fe379cbaedfed54ac8d7 100644
--- a/app/services/notification_service.rb
+++ b/app/services/notification_service.rb
@@ -165,6 +165,14 @@ class NotificationService
     end
   end
 
+  def invite_project_member(project_member, token)
+    mailer.project_member_invited_email(project_member.id, token)
+  end
+
+  def accept_project_invite(project_member)
+    mailer.project_invite_accepted_email(project_member.id)
+  end
+
   def new_project_member(project_member)
     mailer.project_access_granted_email(project_member.id)
   end
@@ -173,6 +181,14 @@ class NotificationService
     mailer.project_access_granted_email(project_member.id)
   end
 
+  def invite_group_member(group_member, token)
+    mailer.group_member_invited_email(group_member.id, token)
+  end
+
+  def accept_group_invite(group_member)
+    mailer.group_invite_accepted_email(group_member.id)
+  end
+
   def new_group_member(group_member)
     mailer.group_access_granted_email(group_member.id)
   end