Android Retrofit使用mailgun发送带附件的电子邮件

时间:2015-12-11 03:30:04

标签: android email retrofit mailgun

我正在使用改装和mailgun发送电子邮件。我能够使用我的代码成功发送电子邮件。

现在我不知道如何在邮件中添加附件。

这是我的代码:

    private SendMailApi sendMailApi;

public interface SendMailApi {

    @Headers({ACCEPT_JSON_HEADER})
    @FormUrlEncoded
    @POST("/messages")
    void authUser(
            @Header("Authorization") String authorizationHeader,
            @Field("from") String from,
            @Field("to") String to,
            @Field("subject") String subject,
            @Field("text") String text,
            Callback<MailGunResponse> cb
    );
}

public void sendMail(String to, String subject, String msg, Callback<MailGunResponse> cb){
    String from = "test <test@address.com>";
    String clientIdAndSecret = "api" + ":" + "key-*******";
    String authorizationHeader = BASIC + " " + Base64.encodeToString(clientIdAndSecret.getBytes(), Base64.NO_WRAP);
    sendMailApi.authUser(authorizationHeader,from, to, subject, msg, cb);
}

public MailGun() {
    RestAdapter restAdapter = getAuthAdapter();
    sendMailApi = restAdapter.create(SendMailApi.class);
}

private RestAdapter getAuthAdapter(){
    RestAdapter.LogLevel logLevel = RestAdapter.LogLevel.FULL;
    if(DEBUG)logLevel = RestAdapter.LogLevel.FULL;
    return new RestAdapter.Builder()
            .setEndpoint(ENDPOINT)
            .setConverter(new GsonConverter(new Gson()))
            .setLogLevel(logLevel)
            .build();
}

现在我不知道应该去哪里和哪个领域附件。 请给我一个例子,比如我有路径时附上图片。

请记住,我现在可以成功发送电子邮件,但没有附件。

非常感谢

1 个答案:

答案 0 :(得分:0)

管理发送附件。人们在问题herehere中找到了解决方法。它看起来很丑陋,可能会破坏,但可以在retorfit 2.0.0上运行。

@Multipart
@POST("messages")
Observable<Void> send(
        @Header("Authorization") String authorizationHeader,
        @Part("from") RequestBody from,
        @Part("to") RequestBody to,
        @Part("subject") RequestBody subject,
        @Part("text") RequestBody text,
        @Part("recipient-variables") RequestBody variables,
        @Part("attachment\"; filename=\"image.jpg") RequestBody attachment
    );


request = mailgun.send(
        MailGun.AUTH,
        RequestBody.create(MediaType.parse("text/plain"), "from"),
        RequestBody.create(MediaType.parse("text/plain"), "to"),
        RequestBody.create(MediaType.parse("text/plain"), "subject"),
        RequestBody.create(MediaType.parse("text/plain"), "message"),
        RequestBody.create(MediaType.parse("text/plain"), "{}"),
        RequestBody.create(MediaType.parse("image/*"), byteArray)
);

检查RequestBody.create()是否有其他加载图片的方法,但所有方法都适用于此。我不知道text/plain,但我无法在没有image/*的情况下打开图片。