diff --git a/staffeln/common/notify.py b/staffeln/common/notify.py
deleted file mode 100644
index e3aabf2..0000000
--- a/staffeln/common/notify.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# Email notification package
-# This should be upgraded by integrating with mail server to send batch
-import smtplib
-from email.mime.text import MIMEText
-from email.mime.multipart import MIMEMultipart
-import staffeln.conf
-from staffeln.common import time as xtime
-
-CONF = staffeln.conf.CONF
-
-
-def sendEmail(src_email, src_pwd, dest_email, subject, content, smtp_server_domain, smtp_server_port):
-    try:
-        message = MIMEMultipart("alternative")
-        message["Subject"] = subject
-        message["From"] = src_email
-        message["To"] = dest_email
-        part = MIMEText(content, "html")
-        message.attach(part)
-
-        s = smtplib.SMTP(host=smtp_server_domain, port=smtp_server_port)
-        s.ehlo()
-        s.starttls()
-        # we can comment this auth func when use the trusted ip without authentication against the smtp server
-        s.login(src_email, src_pwd)
-        s.sendmail(src_email, dest_email, message.as_string())
-        s.close()
-        return True
-    except Exception as e:
-        print(str(e))
-        return False
-
-def SendBackupResultNotification(success_volume_list, failed_volume_list):
-    subject = "Backup result"
-
-    html = "<h3>${TIME}</h3>" \
-           "<h3>Success List</h3>" \
-           "<h4>${SUCCESS_VOLUME_LIST}</h4>" \
-           "<h3>Failed List</h3>" \
-           "<h4>${FAILED_VOLUME_LIST}</h4>"
-
-    success_volumes = '<br>'.join([str(elem) for elem in success_volume_list])
-    failed_volumes = '<br>'.join([str(elem) for elem in failed_volume_list])
-    html = html.replace("${TIME}", xtime.get_current_strtime())
-    html = html.replace("${SUCCESS_VOLUME_LIST}", success_volumes)
-    html = html.replace("${FAILED_VOLUME_LIST}", failed_volumes)
-
-    return sendEmail(src_email=CONF.notification.sender_email,
-                        src_pwd=CONF.notification.sender_pwd,
-                        dest_email=CONF.notification.receiver,
-                        subject=subject,
-                        content=html,
-                        smtp_server_domain=CONF.notification.smtp_server_domain,
-                        smtp_server_port=CONF.notification.smtp_server_port)
diff --git a/staffeln/common/time.py b/staffeln/common/time.py
index 0af1cb4..3059085 100644
--- a/staffeln/common/time.py
+++ b/staffeln/common/time.py
@@ -33,7 +33,7 @@
 
 
 def get_current_strtime():
-    now = datetime.datetime.now()
+    now = datetime.now()
     return now.strftime(DEFAULT_TIME_FORMAT)
 
 
diff --git a/staffeln/conductor/manager.py b/staffeln/conductor/manager.py
index 5997828..6898348 100755
--- a/staffeln/conductor/manager.py
+++ b/staffeln/conductor/manager.py
@@ -7,10 +7,10 @@
 import time
 
 from staffeln.common import constants
-from staffeln.conductor import backup
 from staffeln.common import context
-from staffeln.common import notify
 from staffeln.common import time as xtime
+from staffeln.conductor import backup
+from staffeln.conductor import notify
 from staffeln.i18n import _
 
 LOG = log.getLogger(__name__)
@@ -87,9 +87,11 @@
         backup.Backup().create_queue(current_tasks)
 
     def _report_backup_result(self):
+        # TODO(Alex): Need to update these list
         self.success_backup_list = []
         self.failed_backup_list = []
-        notify.SendNotification(self.success_backup_list, self.failed_backup_list)
+        notify.SendBackupResultEmail(self.success_backup_list, self.failed_backup_list)
+
 
     @periodics.periodic(spacing=CONF.conductor.backup_service_period, run_immediately=True)
     def backup_engine(self):
diff --git a/staffeln/conductor/notify.py b/staffeln/conductor/notify.py
new file mode 100644
index 0000000..d80da4e
--- /dev/null
+++ b/staffeln/conductor/notify.py
@@ -0,0 +1,57 @@
+# Email notification package
+# This should be upgraded by integrating with mail server to send batch
+import smtplib
+from email.mime.text import MIMEText
+from email.mime.multipart import MIMEMultipart
+from oslo_log import log
+import staffeln.conf
+from staffeln.common import time as xtime
+from staffeln.i18n import _
+
+CONF = staffeln.conf.CONF
+LOG = log.getLogger(__name__)
+
+
+def _sendEmail(src_email, src_pwd, dest_email, subject, content, smtp_server_domain, smtp_server_port):
+    message = MIMEMultipart("alternative")
+    message["Subject"] = subject
+    message["From"] = src_email
+    message["To"] = dest_email
+    part = MIMEText(content, "html")
+    message.attach(part)
+
+    s = smtplib.SMTP(host=smtp_server_domain, port=smtp_server_port)
+    s.ehlo()
+    s.starttls()
+    # we can comment this auth func when use the trusted ip without authentication against the smtp server
+    s.login(src_email, src_pwd)
+    s.sendmail(src_email, dest_email, message.as_string())
+    s.close()
+
+
+def SendBackupResultEmail(success_backup_list, failed_backup_list):
+    subject = "Backup result"
+
+    html = "<h3>${TIME}</h3>" \
+           "<h3>Success List</h3>" \
+           "<h4>${SUCCESS_VOLUME_LIST}</h4>" \
+           "<h3>Failed List</h3>" \
+           "<h4>${FAILED_VOLUME_LIST}</h4>"
+
+    success_volumes = '<br>'.join([str(elem) for elem in success_backup_list])
+    failed_volumes = '<br>'.join([str(elem) for elem in failed_backup_list])
+    html = html.replace("${TIME}", xtime.get_current_strtime())
+    html = html.replace("${SUCCESS_VOLUME_LIST}", success_volumes)
+    html = html.replace("${FAILED_VOLUME_LIST}", failed_volumes)
+    try:
+        _sendEmail(src_email=CONF.notification.sender_email,
+                   src_pwd=CONF.notification.sender_pwd,
+                   dest_email=CONF.notification.receiver,
+                   subject=subject,
+                   content=html,
+                   smtp_server_domain=CONF.notification.smtp_server_domain,
+                   smtp_server_port=CONF.notification.smtp_server_port)
+        LOG.info(_("Backup result email sent"))
+    except Exception as e:
+        LOG.error(_("Backup result email send failed. Please check email configuration. %s" % (str(e))))
+
