I am creating a Plugin that displays e-mails as posts. I used the following PHP to access those emails:
<?php
class Email_reader {
// imap server connection
public $conn;
// inbox storage and inbox message count
private $inbox;
private $msg_cnt;
// email login credentials
private $server = 'website.com';
private $user = 'EMAIL@website.com';
private $pass = 'PASSWORD';
private $port = 993; // adjust according to server settings
// connect to the server and get the inbox emails
function __construct() {
$this->connect();
$this->inbox();
}
// close the server connection
function close() {
$this->inbox = array();
$this->msg_cnt = 0;
imap_close($this->conn);
}
// open the server connection
// the imap_open function parameters will need to be changed for the particular server
// these are laid out to connect to a Dreamhost IMAP server
function connect() {
$this->conn = imap_open('{'.$this->server.'/notls}', $this->user, $this->pass);
}
// move the message to a new folder
function move($msg_index, $folder='INBOX.Processed') {
// move on server
imap_mail_move($this->conn, $msg_index, $folder);
imap_expunge($this->conn);
// re-read the inbox
$this->inbox();
}
// get a specific message (1 = first email, 2 = second email, etc.)
function get($msg_index=NULL) {
if (count($this->inbox) <= 0) {
return array();
}
elseif ( ! is_null($msg_index) && isset($this->inbox[$msg_index])) {
return $this->inbox[$msg_index];
}
return $this->inbox[0];
}
// read the inbox
function inbox() {
$this->msg_cnt = imap_num_msg($this->conn);
$in = array();
for($i = 1; $i <= $this->msg_cnt; $i++) {
$in[] = array(
'index' => $i,
'header' => imap_headerinfo($this->conn, $i),
'body' => imap_body($this->conn, $i),
'structure' => imap_fetchstructure($this->conn, $i)
);
}
$this->inbox = $in;
}
}
$emails = new Email_reader;
echo "<pre>";
var_dump($emails);
Now I created a custom post type and I want to assign those emails to the custom post type how can I achieve it.
The code I used is
//// Register Post Type.
if(!function_exists('my_email_custom_post_type')){
function my_email_custom_post_type() {
$labels = array(
'name' => __( 'E-mail Inbox','domain'),
'singular_name' => __( ' E-mail','domain'),
'menu_name' => __( 'E-mail Inbox','domain'),
'parent_item_colon' => __( 'Parent tickets','domain'),
'all_items' => __( 'All E-mail tickets','domain'),
'view_item' => __( 'View E-mail tickets','domain'),
'search_items' => __( 'Search E-mail tickets','domain'),
'not_found' => __( 'Not Found','domain'),
'supports' =>__( 'title', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'revisions', 'page-attributes' ),
'not_found_in_trash' => __( 'Not found in Trash','domain')
);
$args = array(
'label' => __( 'E-mail Inbox','domain'),
'description' => __( 'E-mail','domain'),
'labels' => $labels,
'supports' => array( 'title'),
'capabilities' => array(
'create_posts' => false, // Removes support for the "Add New" function ( use 'do_not_allow' instead of false for multisite set ups )
),
'public' => true,
'hierarchical' => false,
'show_ui' => true,
'menu_icon' => 'dashicons-feedback',
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'has_archive' => true,
'can_export' => true,
'exclude_from_search' => false,
'yarpp_support' => true,
'publicly_queryable' => true,
'capability_type' => 'page'
);
register_post_type( 'post-email', $args );
}
add_action( 'init', 'my_email_custom_post_type', 0 );
}
require_once plugin_dir_path( __FILE__ ) . 'emailpipe.php';
$args = array(
'post_type' => 'my-email',
);
$emails = new WP_query($args);
while($emails->have_posts()) {
$emails->the_post();
?>
<h3><?php the_title(); ?></h3>
<?php the_excerpt();?>
<?php
}
This is for sure not working can you please advise me.