web-dev-qa-db-ja.com

Mailcore2プレーンメールをSwift

最近、MailCore2をObjective-Cプロジェクトに組み込みましたが、完全に機能しています。現在、アプリ内のコードをSwiftに移行中です。 MailCore2 APIをSwiftプロジェクトに正常にインポートしましたが、次の動作するObjective-CコードをSwiftコードに変換する方法に関するドキュメント(Google検索、libmailcore.com、github)がありません。

MCOSMTPSession *smtpSession = [[MCOSMTPSession alloc] init];
smtpSession.hostname = @"smtp.gmail.com";
smtpSession.port = 465;
smtpSession.username = @"[email protected]";
smtpSession.password = @"password";
smtpSession.authType = MCOAuthTypeSASLPlain;
smtpSession.connectionType = MCOConnectionTypeTLS;

MCOMessageBuilder *builder = [[MCOMessageBuilder alloc] init];
MCOAddress *from = [MCOAddress addressWithDisplayName:@"Matt R"
                                              mailbox:@"[email protected]"];
MCOAddress *to = [MCOAddress addressWithDisplayName:nil 
                                            mailbox:@"[email protected]"];
[[builder header] setFrom:from];
[[builder header] setTo:@[to]];
[[builder header] setSubject:@"My message"];
[builder setHTMLBody:@"This is a test message!"];
NSData * rfc822Data = [builder data];

MCOSMTPSendOperation *sendOperation = 
   [smtpSession sendOperationWithData:rfc822Data];
[sendOperation start:^(NSError *error) {
    if(error) {
        NSLog(@"Error sending email: %@", error);
    } else {
        NSLog(@"Successfully sent email!");
    }
}];

このAPIを使用してSwiftでメールを正常に送信する方法を知っている人はいますか?返信してくださった皆様、ありがとうございました。

12
iProgramIt

これが私がそれをした方法です:

ステップ1)mailcore2をインポートします、私はcocoapodsを使用しています

pod 'mailcore2-ios'

ステップ2)ブリッジヘッダーにmailcore2を追加します:Project-Bridging-Header.h

#import <MailCore/MailCore.h>

ステップ3)Swiftに翻訳

var smtpSession = MCOSMTPSession()
smtpSession.hostname = "smtp.gmail.com"
smtpSession.username = "[email protected]"
smtpSession.password = "xxxxxxxxxxxxxxxx"
smtpSession.port = 465
smtpSession.authType = MCOAuthType.SASLPlain
smtpSession.connectionType = MCOConnectionType.TLS
smtpSession.connectionLogger = {(connectionID, type, data) in
    if data != nil {
        if let string = NSString(data: data, encoding: NSUTF8StringEncoding){
            NSLog("Connectionlogger: \(string)")
        }
    }
}

var builder = MCOMessageBuilder()
builder.header.to = [MCOAddress(displayName: "Rool", mailbox: "[email protected]")]
builder.header.from = MCOAddress(displayName: "Matt R", mailbox: "[email protected]")
builder.header.subject = "My message"
builder.htmlBody = "Yo Rool, this is a test message!"

let rfc822Data = builder.data()
let sendOperation = smtpSession.sendOperationWithData(rfc822Data)
sendOperation.start { (error) -> Void in
    if (error != nil) {
        NSLog("Error sending email: \(error)")
    } else {
        NSLog("Successfully sent email!")
    }
} 

Googleアカウントに特別なアプリのパスワードが必要な場合があります。 https://support.google.com/accounts/answer/1858 を参照してください

27
Rool Paap

Swift 3の場合はこれをコピーするだけ

    let smtpSession = MCOSMTPSession()
    smtpSession.hostname = "smtp.gmail.com"
    smtpSession.username = "[email protected]"
    smtpSession.password = "xxxxxxx"
    smtpSession.port = 465
    smtpSession.authType = MCOAuthType.saslPlain
    smtpSession.connectionType = MCOConnectionType.TLS
    smtpSession.connectionLogger = {(connectionID, type, data) in
        if data != nil {
            if let string = NSString(data: data!, encoding: String.Encoding.utf8.rawValue){
                NSLog("Connectionlogger: \(string)")
            }
        }
    }

    let builder = MCOMessageBuilder()
    builder.header.to = [MCOAddress(displayName: "Rool", mailbox: "[email protected]")]
    builder.header.from = MCOAddress(displayName: "Matt R", mailbox: "[email protected]")
    builder.header.subject = "My message"
    builder.htmlBody = "Yo Rool, this is a test message!"

    let rfc822Data = builder.data()
    let sendOperation = smtpSession.sendOperation(with: rfc822Data!)
    sendOperation?.start { (error) -> Void in
        if (error != nil) {
            NSLog("Error sending email: \(error)")
        } else {
            NSLog("Successfully sent email!")
        }
    }
7
Sanip Shrestha

Swiftに添付ファイルとして画像を送信するには、次を追加するだけです。

    var dataImage: NSData?
    dataImage = UIImageJPEGRepresentation(image, 0.6)!
    var attachment = MCOAttachment()
    attachment.mimeType =  "image/jpg"
    attachment.filename = "image.jpg"
    attachment.data = dataImage
    builder.addAttachment(attachment)

答えの下のコメントにこれを追加したと思いますが、たくさんあります。

受け入れられた回答の手順は、特にGoogleアカウントの特別なアプリのパスワードへのリンクを使用して機能しました。

しかし、@ RoolPaapは私が使用したものとは異なるブリッジヘッダーを使用しました。 #include "Mailcore.h"を使用しました

私はこれに従いました youtubeビデオ

#ifndef MyProjectName_Bridging_Header_h
#define MyProjectName_Bridging_Header_h

#include "Mailcore.h"

#endif /* MyProjectName_Bridging_Header_h */
0
Lance Samaria