मैं एक iPhone एप्लिकेशन से मेल कैसे भेज सकता हूं


242

मैं अपने iPhone एप्लिकेशन से एक ईमेल भेजना चाहता हूं। मैंने सुना है कि iOS SDK में ईमेल API नहीं है। मैं निम्नलिखित कोड का उपयोग नहीं करना चाहता क्योंकि यह मेरे आवेदन से बाहर निकल जाएगा:

NSString *url = [NSString stringWithString: @"mailto:foo@example.com?cc=bar@example.com&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here!"];
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];

तो मैं अपने ऐप से ईमेल कैसे भेज सकता हूं?

जवाबों:


430

IOS 3.0 और बाद में आपको MFMailComposeViewControllerक्लास, और MFMailComposeViewControllerDelegateप्रोटोकॉल का उपयोग करना चाहिए , जो कि मैसेजयूआई फ्रेमवर्क में दूर है।

पहले ढांचा जोड़ें और आयात करें:

#import <MessageUI/MFMailComposeViewController.h>

फिर, एक संदेश भेजने के लिए:

MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller setSubject:@"My Subject"];
[controller setMessageBody:@"Hello there." isHTML:NO]; 
if (controller) [self presentModalViewController:controller animated:YES];
[controller release];

तब उपयोगकर्ता काम करता है और आपको समय पर प्रतिनिधि कॉलबैक मिलता है:

- (void)mailComposeController:(MFMailComposeViewController*)controller  
          didFinishWithResult:(MFMailComposeResult)result 
                        error:(NSError*)error;
{
  if (result == MFMailComposeResultSent) {
    NSLog(@"It's away!");
  }
  [self dismissModalViewControllerAnimated:YES];
}

ईमेल भेजने के लिए डिवाइस कॉन्फ़िगर किया गया है या नहीं यह जांचना याद रखें:

if ([MFMailComposeViewController canSendMail]) {
  // Show the composer
} else {
  // Handle the error
}

5
+1। जिन रूपरेखाओं को आयात करने की आवश्यकता है, वे यहाँ उल्लिखित हैं ( mobileorchard.com/… )।
डैन रोसेनस्टार्क

71
आपको कूदने से बचाने के लिए, आपको #import <MessageUI / MFMailComposeViewController.h>
TomH

22
बस इस बात पर ध्यान दें कि चूंकि यह उत्तर UIViewController के तरीकों में लिखा गया था presentModalViewController:animated:और dismissModalViewControllerAnimated:उन्हें पदावनत के रूप में चिह्नित किया गया है - बजाय ब्लॉक-आधारित प्रतिस्थापन के तरीकों presentViewController:animated:completion:और dismissViewControllerAnimated:completion:इसका उपयोग किया जाना चाहिए।

2
और .h@interface viewController : UIViewController <MFMailComposeViewControllerDelegate>
नजीर

18
और IOS में 6 के [self presentModalViewController:controller animated:YES]; साथ [self presentViewController:controller animated:YES completion:nil]; और [self dismissModalViewControllerAnimated:YES]; बदलें [self dismissViewControllerAnimated:YES completion:nil];
नज़ीर

61

MFMailComposeViewController iPhone OS 3.0 सॉफ्टवेयर की रिलीज के बाद जाने का तरीका है। आप नमूना कोड या मेरे द्वारा लिखे गए ट्यूटोरियल को देख सकते हैं ।


2
मुगुनथ द्वारा बहुत बढ़िया पोस्ट। जाने के लिए दोस्त!
जॉर्डन

1
यह वास्तव में बहुत बढ़िया है। धन्यवाद। मैंने विशेष रूप से उपयोगकर्ता से ईमेल और विषय को स्वीकार करने के लिए एक दृश्य तैयार किया है। एक ही कोड को लागू करने से इसके फिर से कुछ इसी तरह का दृश्य दिखा। क्या मैं दृश्य नियंत्रक वर्ग में मेरे बटन प्रेस घटना से प्रतिनिधि विधि को लागू कर सकता हूं आपकी मदद के लिए धन्यवाद, शिबिन
12-12

मैंने एक ही नमूना कोड डाउनलोड किया है लेकिन यह कोई मेल नहीं भेज रहा है। यह केवल संकेत देता है कि मेल सफलतापूर्वक भेजा गया था लेकिन कोई मेल प्राप्त नहीं हुआ है। मैंने MessageUI फ्रेमवर्क को जोड़ने की कोशिश की है जो डिफ़ॉल्ट रूप से लाल रंग का दिखाई दिया लेकिन फिर भी एप्लिकेशन मेल नहीं भेज रहा है। इस संबंध में किसी भी मदद की बहुत सराहना की जाएगी। मैं सिम्युलेटर में ऐप का परीक्षण कर रहा हूं।
रविशंकर

सिम्युलेटर से ईमेल नहीं भेज सकते।
मलकी १

20

कुछ चीज़ें जो मैं यहाँ जोड़ना चाहता हूँ:

  1. मेल्टो यूआरएल का उपयोग करना सिम्युलेटर में काम नहीं करेगा क्योंकि सिम्युलेटर पर मेल स्थापित नहीं है। हालांकि यह डिवाइस पर काम करता है।

  2. Mailto URL की लंबाई की सीमा है। यदि URL 4096 वर्णों से बड़ा है, तो mail.app लॉन्च नहीं होगा।

  3. ओएस 3.0 में एक नया वर्ग है जो आपको अपना ऐप छोड़ने के बिना ई-मेल भेजने की सुविधा देता है। वर्ग MFMailComposeViewController देखें।


13

यदि आप अपने एप्लिकेशन से ईमेल भेजना चाहते हैं, तो उपरोक्त कोड ऐसा करने का एकमात्र तरीका है जब तक कि आप अपने ऐप क्लाइंट (एसएमटीपी) को अपने ऐप के अंदर कोड न करें, या आपके पास एक सर्वर आपके लिए मेल भेजें।

उदाहरण के लिए, आप अपने सर्वर पर एक URL आमंत्रित करने के लिए अपने ऐप को कोड कर सकते हैं जो आपके लिए मेल भेजेगा। फिर आप बस अपने कोड से URL को कॉल करें।

ध्यान दें कि उपरोक्त कोड से आप ईमेल में कुछ भी संलग्न नहीं कर सकते हैं, जो SMTP क्लाइंट विधि आपको करने की अनुमति देगी, साथ ही सर्वर-साइड विधि भी।


12

नीचे दिए गए कोड का उपयोग मेरे आवेदन में संलग्नक के साथ ईमेल भेजने के लिए किया जाता है। यहां अटैचमेंट एक छवि है। आप किसी भी प्रकार की फाइल भेज सकते हैं केवल यह ध्यान रखना है कि आपको सही निर्दिष्ट करना था 'माइम टाइप' ।

इसे अपनी .h फ़ाइल में जोड़ें

#import <MessageUI/MFMailComposeViewController.h>

अपनी प्रोजेक्ट फ़ाइल में MessageUI.framework जोड़ें

NSArray *paths = SSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:@"myGreenCard.png"];



MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller setSubject:@"Green card application"];
[controller setMessageBody:@"Hi , <br/>  This is my new latest designed green card." isHTML:YES]; 
[controller addAttachmentData:[NSData dataWithContentsOfFile:getImagePath] mimeType:@"png" fileName:@"My Green Card"];
if (controller)
    [self presentModalViewController:controller animated:YES];
[controller release];

प्रतिनिधि विधि नीचे दी गई है

  -(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error;
{
    if (result == MFMailComposeResultSent) {
        NSLog(@"It's away!");
    }
    [self dismissModalViewControllerAnimated:YES];
}

11

यह वह कोड है जो u मदद कर सकता है लेकिन संदेश ui framewark को शामिल करना न भूलें और प्रतिनिधियों को शामिल करें विधि MFMailComposeViewControllerDelegate

-(void)EmailButtonACtion{

        if ([MFMailComposeViewController canSendMail])
        {
            MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
            controller.mailComposeDelegate = self;
            [controller.navigationBar setBackgroundImage:[UIImage imageNamed:@"navigation_bg_iPhone.png"] forBarMetrics:UIBarMetricsDefault];
            controller.navigationBar.tintColor = [UIColor colorWithRed:51.0/255.0 green:51.0/255.0 blue:51.0/255.0 alpha:1.0];
            [controller setSubject:@""];
            [controller setMessageBody:@" " isHTML:YES];
            [controller setToRecipients:[NSArray arrayWithObjects:@"",nil]];
            UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
            UIImage *ui = resultimg.image;
            pasteboard.image = ui;
            NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(ui)];
            [controller addAttachmentData:imageData mimeType:@"image/png" fileName:@" "];
            [self presentViewController:controller animated:YES completion:NULL];
        }
        else{
            UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"alrt" message:nil delegate:self cancelButtonTitle:@"ok" otherButtonTitles: nil] ;
            [alert show];
        }

    }
    -(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
    {

        [MailAlert show];
        switch (result)
        {
            case MFMailComposeResultCancelled:
                MailAlert.message = @"Email Cancelled";
                break;
            case MFMailComposeResultSaved:
                MailAlert.message = @"Email Saved";
                break;
            case MFMailComposeResultSent:
                MailAlert.message = @"Email Sent";
                break;
            case MFMailComposeResultFailed:
                MailAlert.message = @"Email Failed";
                break;
            default:
                MailAlert.message = @"Email Not Sent";
                break;
        }
        [self dismissViewControllerAnimated:YES completion:NULL];
        [MailAlert show];
    }

आपका बहुत बहुत धन्यवाद! HTML बॉडी के साथ बहुत उपयोगी उदाहरण है।
रेस्ट

4

स्विफ्ट 2.2। Esq के उत्तर से अनुकूलित

import Foundation
import MessageUI

class MailSender: NSObject, MFMailComposeViewControllerDelegate {

    let parentVC: UIViewController

    init(parentVC: UIViewController) {
        self.parentVC = parentVC
        super.init()
    }

    func send(title: String, messageBody: String, toRecipients: [String]) {
        if MFMailComposeViewController.canSendMail() {
            let mc: MFMailComposeViewController = MFMailComposeViewController()
            mc.mailComposeDelegate = self
            mc.setSubject(title)
            mc.setMessageBody(messageBody, isHTML: false)
            mc.setToRecipients(toRecipients)
            parentVC.presentViewController(mc, animated: true, completion: nil)
        } else {
            print("No email account found.")
        }
    }

    func mailComposeController(controller: MFMailComposeViewController,
        didFinishWithResult result: MFMailComposeResult, error: NSError?) {

            switch result.rawValue {
            case MFMailComposeResultCancelled.rawValue: print("Mail Cancelled")
            case MFMailComposeResultSaved.rawValue: print("Mail Saved")
            case MFMailComposeResultSent.rawValue: print("Mail Sent")
            case MFMailComposeResultFailed.rawValue: print("Mail Failed")
            default: break
            }

            parentVC.dismissViewControllerAnimated(false, completion: nil)
    }
}

क्लाइंट कोड :

var ms: MailSender?

@IBAction func onSendPressed(sender: AnyObject) {
    ms = MailSender(parentVC: self)
    let title = "Title"
    let messageBody = "/programming/310946/how-can-i-send-mail-from-an-iphone-application this question."
    let toRecipents = ["foo@bar.com"]
    ms?.send(title, messageBody: messageBody, toRecipents: toRecipents)
}

4

IPhone एप्लिकेशन से एक ईमेल भेजने के लिए आपको कार्य की सूची के नीचे करने की आवश्यकता है।

चरण 1: आयात#import <MessageUI/MessageUI.h> अपने नियंत्रक वर्ग में जहाँ आप एक ईमेल भेजना चाहते हैं।

चरण 2: प्रतिनिधि को अपने नियंत्रक में जोड़ें जैसे नीचे दिखाया गया है

 @interface <yourControllerName> : UIViewController <MFMessageComposeViewControllerDelegate, MFMailComposeViewControllerDelegate>

चरण 3: ईमेल भेजने के लिए नीचे विधि जोड़ें।

 - (void) sendEmail {
 // Check if your app support the email.
 if ([MFMailComposeViewController canSendMail]) {
    // Create an object of mail composer.
    MFMailComposeViewController *mailComposer =      [[MFMailComposeViewController alloc] init];
    // Add delegate to your self.
    mailComposer.mailComposeDelegate = self;
    // Add recipients to mail if you do not want to add default recipient then remove below line.
    [mailComposer setToRecipients:@[<add here your recipient objects>]];
    // Write email subject.
    [mailComposer setSubject:@“<Your Subject Here>”];
    // Set your email body and if body contains HTML then Pass “YES” in isHTML.
    [mailComposer setMessageBody:@“<Your Message Body>” isHTML:NO];
    // Show your mail composer.
    [self presentViewController:mailComposer animated:YES completion:NULL];
 }
 else {
 // Here you can show toast to user about not support to sending email.
}
}

चरण 4: MFMailComposeViewController प्रतिनिधि लागू करें

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(nullable NSError *)error {
[controller dismissViewControllerAnimated:TRUE completion:nil];


switch (result) {
   case MFMailComposeResultSaved: {
    // Add code on save mail to draft.
    break;
}
case MFMailComposeResultSent: {
    // Add code on sent a mail.
    break;
}
case MFMailComposeResultCancelled: {
    // Add code on cancel a mail.
    break;
}
case MFMailComposeResultFailed: {
    // Add code on failed to send a mail.
    break;
}
default:
    break;
}
}

क्या यह उत्तर किसी भी नई जानकारी को प्रदान करता है जो पहले से मौजूद किसी भी उत्तर में शामिल नहीं है?
फ्लोरियन कोच

2

स्विफ्ट 2.0

func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?){
    if let error = error{
        print("Error: \(error)")
    }else{
        //NO Error
        //------------------------------------------------
        var feedbackMsg = ""

        switch result.rawValue {
        case MFMailComposeResultCancelled.rawValue:
            feedbackMsg = "Mail Cancelled"
        case MFMailComposeResultSaved.rawValue:
            feedbackMsg = "Mail Saved"
        case MFMailComposeResultSent.rawValue:
            feedbackMsg = "Mail Sent"
        case MFMailComposeResultFailed.rawValue:
            feedbackMsg = "Mail Failed"
        default:
            feedbackMsg = ""
        }

        print("Mail: \(feedbackMsg)")

        //------------------------------------------------
    }
}

1

Heres एक स्विफ्ट संस्करण:

import MessageUI

class YourVC: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        if MFMailComposeViewController.canSendMail() {
            var emailTitle = "Vea Software Feedback"
            var messageBody = "Vea Software! :) "
            var toRecipents = ["pj@veasoftware.com"]
            var mc:MFMailComposeViewController = MFMailComposeViewController()
            mc.mailComposeDelegate = self
            mc.setSubject(emailTitle)
            mc.setMessageBody(messageBody, isHTML: false)
            mc.setToRecipients(toRecipents)
            self.presentViewController(mc, animated: true, completion: nil)
        } else {
            println("No email account found")
        }
    }
}

extension YourVC: MFMailComposeViewControllerDelegate {
    func mailComposeController(controller: MFMailComposeViewController!, didFinishWithResult result: MFMailComposeResult, error: NSError!) {
        switch result.value {
        case MFMailComposeResultCancelled.value:
            println("Mail Cancelled")
        case MFMailComposeResultSaved.value:
            println("Mail Saved")
        case MFMailComposeResultSent.value:
            println("Mail Sent")
        case MFMailComposeResultFailed.value:
            println("Mail Failed")
        default:
            break
        }
        self.dismissViewControllerAnimated(false, completion: nil)
    }
}

स्रोत


0

मैंने KRNSendEmail नाम का एक साधारण रैपर लिखा जो ईमेल को एक विधि कॉल पर भेजने को सरल करता है।

KRNSendEmail को अच्छी तरह से प्रलेखित किया गया है और कोकोआपोड्स में जोड़ा गया है।

https://github.com/ulian-onua/KRNSendEmail

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.