     
     // MARK: - Sender
     
+    /// A delegate that is informed of successful or failed feedback sending.
     weak var delegate: SenderDelegate?
     
+    /**
+     Sends the feedback using the provided view controller as a presenting view controller.
+     
+     - parameter feedback:       The feedback to send.
+     - parameter viewController: The view controller from which to present any of the sender’s necessary views.
+     */
     func sendFeedback(feedback: Feedback, fromViewController viewController: UIViewController?) {
         guard let viewController = viewController else { fail(.NoViewControllerProvided); return }
+        
+        guard MFMailComposeViewController.canSendMail() else { fail(.MailCannotSend); return }
         
         mailComposer = MFMailComposeViewController()
         self.feedback = feedback


import MessageUI

/// A `Sender`
class MailSender: NSObject, Sender {

    enum Error: ErrorType {
        case Unknown
        case NoViewControllerProvided
        case ImageEncoding
        case MailCanceled(underlyingError: NSError?)
        case MailFailed(underlyingError: NSError?)
    }
    
    enum Success: SuccessType {
        case Saved
        case Sent
    }
    

        viewController.presentViewController(mailComposer, animated: true, completion: nil)
    }
    
    // MARK: - MailSender
    
    private func tryToAttachScreeenshot(screenshot: UIImage) {
        do {
            //TODO: Make screenshot.png configurable
            try mailComposer.addAttachmentImage(screenshot, fileName: "Screenshot.png")
