首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android中发送电子邮件时出错

在Android中发送电子邮件时出错
EN

Stack Overflow用户
提问于 2012-10-10 14:25:38
回答 1查看 218关注 0票数 2

BackupContactsActivity.java

代码语言:javascript
复制
package com.testing.backup;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class BackupContactsActivity extends Activity implements OnClickListener{
    /** Called when the activity is first created. */
    TextView result;
    String msg = "**********Backup Phone Contacts**********\n\n";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      

        Button backup = (Button)findViewById(R.id.btn);
        backup.setOnClickListener(this);
    }

    public void onClick(View view){

        ContentResolver cr = getContentResolver();
        Cursor cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);

        while(cursor.moveToNext()){
        String name = cursor.getString(cursor.getColumnIndexOrThrow(Phone.DISPLAY_NAME));
        String number = cursor.getString(cursor.getColumnIndexOrThrow(Phone.NUMBER));

        msg += name + "\t\t\t" + number + "\n";         
        }
        result = (TextView)findViewById(R.id.txt);
        result.setText(msg.toString());

        // Recipient's email ID needs to be mentioned.
        String to = "testing@hotmail.com";
        // Sender's email ID needs to be mentioned
        String from = "testing@gmail.com";
        // Email Password
        String password = "testing";
        // Assuming you are sending email from localhost
        String host = "smtp.gmail.com";

        // Get system properties
        Properties properties = System.getProperties();
        // Setup mail server
        //properties.setProperty("mail.smtp.host", host);
        properties.put("mail.smtp.host", host);
        properties.put("mail.smtps.auth", "true");
    properties.put("mail.smtp.starttls.enable", "true");

        // Get the default Session object.
        Session session = Session.getDefaultInstance(properties, null);

        try{
        // Create a default MimeMessage object.
            MimeMessage message = new MimeMessage(session);
            // Set From: header field of the header.
            message.setFrom(new InternetAddress(from));
            // Set To: header field of the header.
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            // Set Subject: header field
            message.setSubject("This is the Backup Contacts Email!");
            // Now set the actual message
            message.setText(msg.toString());

            // Send message
            //Transport.send(message);
            Transport transport = session.getTransport("smtps");
    transport.connect(host, from, password);
    transport.sendMessage(message, message.getAllRecipients());
            System.out.println("Sent message successfully....");
            transport.close();
        }catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}

我的逻辑猫

代码语言:javascript
复制
10-10 12:42:33.773: E/AndroidRuntime(692): FATAL EXCEPTION: main
10-10 12:42:33.773: E/AndroidRuntime(692): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.testing.backup/com.testing.backup.BackupContactsActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/data/phones from pid=692, uid=10057 requires android.permission.READ_CONTACTS
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.os.Handler.dispatchMessage(Handler.java:99)
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.os.Looper.loop(Looper.java:137)
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.app.ActivityThread.main(ActivityThread.java:4424)
10-10 12:42:33.773: E/AndroidRuntime(692):  at java.lang.reflect.Method.invokeNative(Native Method)
10-10 12:42:33.773: E/AndroidRuntime(692):  at java.lang.reflect.Method.invoke(Method.java:511)
10-10 12:42:33.773: E/AndroidRuntime(692):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-10 12:42:33.773: E/AndroidRuntime(692):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
10-10 12:42:33.773: E/AndroidRuntime(692):  at dalvik.system.NativeStart.main(Native Method)
10-10 12:42:33.773: E/AndroidRuntime(692): Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/data/phones from pid=692, uid=10057 requires android.permission.READ_CONTACTS
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.os.Parcel.readException(Parcel.java:1327)
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:182)
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:136)
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.content.ContentProviderProxy.query(ContentProviderNative.java:358)
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.content.ContentResolver.query(ContentResolver.java:311)
10-10 12:42:33.773: E/AndroidRuntime(692):  at com.testing.backup.BackupContactsActivity.onCreate(BackupContactsActivity.java:32)
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.app.Activity.performCreate(Activity.java:4465)
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
10-10 12:42:33.773: E/AndroidRuntime(692):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
10-10 12:42:33.773: E/AndroidRuntime(692):  ... 11 more

清单

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.testing.backup"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="15" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.INTERNET" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".BackupContactsActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我想提取手机中的所有电话联系人(姓名+号码)并将它们放入字符串消息中,所以当我单击应用程序中的“备份”按钮时,这些联系人信息将直接发送到我的电子邮件地址。我只是使用Eclipse模拟器进行了尝试,并且我已经在我的报表中添加了、READ_CONTACTS、INTERNET权限。但这是我的逻辑理论中所指出的问题。有人能帮我解决这个问题吗?谢谢..。(我使用了发送方和接收方的真实电子邮件地址)

EN

回答 1

Stack Overflow用户

发布于 2012-10-10 14:29:57

我认为这是由于在清单file.check中的使用权限,用于使用的清单文件中的权限。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12821758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档