2

私は Cakephp 2.x の新しい学習者です。ユーザーが履歴書ファイルをアップロードし、電子メールの添付ファイルとして送信するための簡単なフォームを作成したいと考えています。どういうわけか、アップロードしたファイルをメールに添付する方法が見つかりません。どんな助けでも大歓迎です!ここに私の send.ctp があります:

<?php 
   echo $this -> Form -> create(null, array('enctype' =>'multipart/form-data'));
   echo $this -> Form -> input('first_name', array('type'=>'text')); 
   echo $this -> Form ->input('last_name', array('type'=>'text'));
   echo $this -> Form ->input('contact_number',array('type'=>'text')); 
   echo $this -> Form ->input('email',array('type'=>'text'));
   echo $this -> Form ->input('resume', array('type' => 'file',));
   echo $this -> Form ->end('Submit');      
?>

ここに私のHomesController.phpがあります

<?php 
   class HomesController extends AppController {
public $name = 'Homes';
public $uses = null;
public $helpers = array('Html', 'Form');

    public function index() {
    }
public function send(){
   if (!empty($this->data)) {
      echo $this->data['last_name'];
      echo $this->data['contact_number'];
      echo $this->data['email'];
          echo $this->data['resume'];

      App::uses('CakeEmail', 'Network/Email');
      $email = new CakeEmail();
      $email->from('xyz@gmail.com');
          $email->to('abc@gmail.com');
          $email->subject('About');
          $email->attachments = array($this->data['resume']);
      $email->send($this->data['last_name']);
      $this->redirect(array('action' => 'index'));
   }
     }
   }?>

電子メールは実際に送信および受信できますが、添付ファイルはありません。「echo $this->data['resume']」を試すと、文字列のみが表示されます---「配列」。ただし、「echo $this->data['last_name']」などの他のフィールドは適切に機能します。

http://cakebaker.42dh.com/2006/04/15/file-upload-with-cakephp/ 上記のデータベースを使用しますが、データベースをファイルの保存に使用したくありません。そして、2.xでは実行できないcakephp 1.xを使用しています。

CakePHP でフォームベースのファイルアップロードを行うには? これは、ファイルを電子メールに添付する方法については述べていません。

これは私の Config/email.php です。私は gmail smtp を使用しています: class EmailConfig {

public $default = array(
    'transport' => 'Smtp',
    'from' => 'XXX@gmail.com',
    //'charset' => 'utf-8',
    //'headerCharset' => 'utf-8',
);

public $smtp = array(
    'transport' => 'Smtp',
    'from' => array('XXX@gmail.com' => 'Sender'),
    'host' => 'smtp.gmail.com',
    'port' => 465,
    'timeout' => 30,
    'username' => 'XXX',
    'password' => '@password',
    'client' => null,
    'log' => false,
    //'charset' => 'utf-8',
    //'headerCharset' => 'utf-8',
);

public $fast = array(
    'from' => 'you@localhost',
    'sender' => null,
    'to' => null,
    'cc' => null,
    'bcc' => null,
    'replyTo' => null,
    'readReceipt' => null,
    'returnPath' => null,
    'messageId' => true,
    'subject' => null,
    'message' => null,
    'headers' => null,
    'viewRender' => null,
    'template' => false,
    'layout' => false,
    'viewVars' => null,
    'attachments' => null,
    'emailFormat' => null,
    'transport' => 'Smtp',
    'host' => 'localhost',
    'port' => 25,
    'timeout' => 30,
    'username' => 'user',
    'password' => 'secret',
    'client' => null,
    'log' => true,
    //'charset' => 'utf-8',
    //'headerCharset' => 'utf-8',
);

}

4

2 に答える 2

3

$this->data['resume']ファイルのアップロードに関する情報を含む配列です。

配列は次のようになります。

array(
   'name' => '(filename)',
   'type' => '(filetype)',
   'tmp_name' => '(file location)',
   'error' => (int) 0,
   'size' => (int) 1
)

次を使用して添付ファイルを設定してみてください。

$email->attachments(array($this->data['resume']['name'] => $this->data['resume']['tmp_name']));
于 2012-10-25T08:58:55.163 に答える
1
$Path = WWW_ROOT."img";
$fileName = 'image.png';    
$this->Email->to = $to;
$this->Email->subject = $subject;
$this->Email->attachments = array($Path.$fileName);
$this->Email->from = $from;
于 2014-05-06T10:59:50.963 に答える