আমি কীভাবে আইফোন অ্যাপ্লিকেশন থেকে মেল পাঠাতে পারি


242

আমি আমার আইফোন অ্যাপ্লিকেশন থেকে একটি ইমেল প্রেরণ করতে চাই। আমি শুনেছি আইওএস এসডিকে কোনও ইমেল এপিআই নেই। আমি নিম্নলিখিত কোডটি ব্যবহার করতে চাই না কারণ এটি আমার অ্যাপ্লিকেশনটি প্রস্থান করবে:

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 3.0.০ এবং তারপরে প্রোটোকলটি , যা বার্তা ইউআই ফ্রেমওয়ার্কে দূরে রয়েছে।

প্রথমে কাঠামো যুক্ত করুন এবং আমদানি করুন:

#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 টি। যে ফ্রেমওয়ার্কগুলি আমদানি করা দরকার তা এখানে উল্লেখ করা হয়েছে ( মোবাইলরচার্ড . com/… )।
ড্যান রোজনস্টার্ক

71
আপনাকে এই লাফটি বাঁচাতে আপনার # ইমপোর্ট <ম্যাসেজইউআই / এমএফমেইলকম্পোজভিউ কনট্রোলারআর>
টমএইচ

22
শুধু খেয়াল করা জরুরী যে যেহেতু এই উত্তর UIViewController এর পদ্ধতি লেখা হয়েছিল presentModalViewController:animated:এবং dismissModalViewControllerAnimated:অবচিত হিসেবে চিহ্নিত করা হয়েছে - পরিবর্তে ব্লক-ভিত্তিক প্রতিস্থাপন পদ্ধতি presentViewController:animated:completion:এবং dismissViewControllerAnimated:completion:ব্যবহার করা উচিত।

2
এবং .h@interface viewController : UIViewController <MFMailComposeViewControllerDelegate>
নাজির

18
এবং আইওএস 6-এ [self presentModalViewController:controller animated:YES]; প্রতিস্থাপন করুন [self presentViewController:controller animated:YES completion:nil]; এবং এর সাথে [self dismissModalViewControllerAnimated:YES]; প্রতিস্থাপন করুন [self dismissViewControllerAnimated:YES completion:nil];
নাজির

61

এমএফমেইলকম্পোজভিউ কনট্রোলার আইফোন ওএস 3.0 সফ্টওয়্যার প্রকাশের পরে যাওয়ার উপায় go নমুনা কোড বা আমার লেখা টিউটোরিয়ালটি আপনি দেখতে পারেন ।


2
মুগুনথের দুর্দান্ত পোস্ট। বন্ধুকে যাওয়ার উপায়!
জর্ডান

1
এটা সত্যিই দুর্দান্ত। ধন্যবাদ। আমি ব্যবহারকারীর কাছ থেকে ইমেল এবং বিষয় গ্রহণ করার জন্য একটি ভিউ বিশেষভাবে ডিজাইন করেছি। একই কোডটি প্রয়োগ করে এটি আবার কিছুটা একইরকম ভিউ দেখায়। ভিউ কন্ট্রোলার ক্লাসে আমি আমার বোতাম
টিপ

আমি একই নমুনা কোডটি ডাউনলোড করেছি তবে এটি কোনও মেল প্রেরণ করে না। এটি কেবলমাত্র অনুরোধ জানায় যে মেল সফলভাবে প্রেরণ করা হয়েছিল কিন্তু কোনও মেল পাওয়া যায় না। আমি মেসেজআইআই ফ্রেমওয়ার্ক যুক্ত করার চেষ্টা করেছি যা ডিফল্টরূপে লাল রঙিন দেখা গেছে তবে এখনও অ্যাপ্লিকেশনটি মেলটি প্রেরণ করছে না। এই ক্ষেত্রে কোনও সহায়তা অত্যন্ত প্রশংসা করা হবে। আমি অ্যাপটি সিমুলেটারে পরীক্ষা করছি।
রবি শঙ্কর

সিমুলেটর থেকে ইমেল পাঠানো যায় না।
malaki1974

20

আমি এখানে কয়েকটি জিনিস যুক্ত করতে চাই:

  1. মেলটো ইউআরএল ব্যবহার করা সিমুলেটারে কাজ করবে না কারণ মেল.এপ সিমুলেটারে ইনস্টল করা হয়নি। এটি ডিভাইসে যদিও কাজ করে।

  2. মেলটো ইউআরএলটির দৈর্ঘ্যের সীমা রয়েছে। যদি URL 4096 টির চেয়ে বেশি অক্ষরের হয় তবে মেল.অ্যাপ লঞ্চ হবে না।

  3. ওএস 3.0.০ এ একটি নতুন ক্লাস রয়েছে যা আপনাকে আপনার অ্যাপ্লিকেশনটি ছাড়াই একটি ইমেল পাঠাতে দেয়। MFMailComposeViewController ক্লাসটি দেখুন।


13

আপনি যদি নিজের অ্যাপ্লিকেশন থেকে ইমেল প্রেরণ করতে চান তবে উপরের কোডটি কেবলমাত্র এটি করার উপায় যদি না আপনি নিজের অ্যাপের ভিতরে নিজের মেইল ​​ক্লায়েন্ট (এসএমটিপি) কোড করেন বা কোনও সার্ভার আপনার জন্য মেল না পাঠায়।

উদাহরণস্বরূপ, আপনি আপনার অ্যাপ্লিকেশনটিকে আপনার সার্ভারে একটি URL চাওয়ার জন্য কোড করতে পারেন যা আপনার জন্য মেলটি প্রেরণ করবে। তারপরে আপনি কেবল আপনার কোড থেকে URL টি কল করুন।

নোট করুন যে উপরের কোড সহ আপনি ইমেলটিতে কোনও কিছু সংযুক্ত করতে পারবেন না, যা এসএমটিপি ক্লায়েন্ট পদ্ধতি আপনাকে করার অনুমতি দেয়, পাশাপাশি সার্ভার-সাইড পদ্ধতি।


12

সংযুক্তি সহ ইমেল প্রেরণের জন্য নীচে কোডটি আমার অ্যাপ্লিকেশনটিতে ব্যবহৃত হচ্ছে সংযুক্তিগুলি একটি চিত্র You আপনি যে কোনও ধরণের ফাইল প্রেরণ করতে পারেন কেবল জিনিসটি মনে রাখা উচিত আপনি সঠিক 'মাইমটাইপ' নির্দিষ্ট করতে হয়েছিল

এটি আপনার .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

এটি এমন কোড যা আপনাকে সাহায্য করতে পারে তবে ইউআই ফ্রেমওয়ার্ক বার্তা অন্তর্ভুক্ত করতে এবং প্রতিনিধি পদ্ধতি এমএফমেইলকমপোজ ভিউকন্ট্রোলারডেলিগেট অন্তর্ভুক্ত করতে ভুলে যায় না

-(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];
    }

আপনাকে অনেক ধন্যবাদ! এইচটিএমএল বডি সহ খুব দরকারী উদাহরণ।
রেস্ট করুন

4

সুইফট 2.2। এসকের উত্তর থেকে অভিযোজিত

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

আইফোন অ্যাপ্লিকেশন থেকে ইমেল প্রেরণের জন্য আপনাকে কার্য তালিকার নীচে করা দরকার।

পদক্ষেপ 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: এমএফমেইলকম্পোজভিউকন্ট্রোলার প্রতিনিধি কার্যকর করুন

- (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

সুইফট ২.০

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 ভাল নথিভুক্ত এবং কোকোপডগুলিতে যুক্ত করা হয়েছে।

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.