Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba

.docx attachment not working in custom contact form


Go to End
Reply


6 Posts   3748 Views

Avatar
lozhowlett

Community Member, 149 Posts

2 December 2011 at 11:37pm

Hi everyone,

I am trying to make a CV upload tool...

function UploadCV() {
            // Create fields          
            $fields = new FieldSet(
                new TextField('Name', 'Name'),
                new EmailField('Email', 'Email'),
                new TextField('Telephone','Telephone / Mobile'),
                new FileField('CVUpload', 'CV Attachment')
            
            );

            // Create action
            $actions = new FieldSet(
                new FormAction('SendContactForm', 'UPLOAD & SEND')
            );

            // Create Validators
            $validator = new RequiredFields('Name', 'Email', 'Telephone');

            return new Form($this, 'UploadCV', $fields, $actions, $validator);
        }
        
        function SendContactForm($data, $form) {
   
            //Set data
            $From = $data['Email'];
            $To = "lawrence@newedge.co.uk";
            $Subject = "CV Upload Submission";     
            $email = new Email($From, $To, $Subject);
            //set template
            $email->setTemplate('CvUpload');
            //populate template
            $email->populateTemplate($data);
            //attach upload
            if (isset($_FILES["CVUpload"]) && is_uploaded_file($_FILES["CVUpload"]["tmp_name"])) {
                $email->attachFile($_FILES["CVUpload"]["tmp_name"], $_FILES["CVUpload"]["name"]);
            }
            //send mail
            $email->send();
            //return to submitted message
            Director::redirect($this->Link("?success=1"));
        }

        public function Success()
        {
            return isset($_REQUEST['success']) && $_REQUEST['success'] == "1";
        }

However when I select a .docx file I get this error....


[Notice] Undefined index: docx
POST /candidates/UploadCV

Line 451 in /var/sites/s/seimansears.co.uk/public_html/sapphire/email/Mailer.php

Source

442 }
443 
444 /*
445  * Get mime type based on extension
446  */
447 function getMimeType($filename) {
448 	global $global_mimetypes;
449 	if(!$global_mimetypes) loadMimeTypes();
450 	$ext = strtolower(substr($filename,strrpos($filename,'.')+1));
451 	return $global_mimetypes[$ext];
452 }
453 
454 /*
455  * Load the mime-type data from the system file
456  */
457 function loadMimeTypes() {
Trace

getMimeType(ecommerce questions.docx) 
Line 389 of Mailer.php
encodeFileForEmail(Array) 
Line 116 of Mailer.php
htmlEmail(lawrence@newedge.co.uk,lawrence@newedge.co.uk,CV Upload Submission,<html> <body> <p>The following message was submitted to your site by <a href="mailto:lawrence@newedge.co.uk">lawrence howlett:</a></p> <p>Name: lawrence howlett</P> <p>Email: lawrence@newedge.co.uk</P> <p>Telephone / Mobile: 448707606812</P> </body> </html>,Array,Array,,) 
Line 31 of Mailer.php
Mailer->sendHTML(lawrence@newedge.co.uk,lawrence@newedge.co.uk,CV Upload Submission,<html> <body> <p>The following message was submitted to your site by <a href="mailto:lawrence@newedge.co.uk">lawrence howlett:</a></p> <p>Name: lawrence howlett</P> <p>Email: lawrence@newedge.co.uk</P> <p>Telephone / Mobile: 448707606812</P> </body> </html>,Array,Array,) 
Line 486 of Email.php
Email->send() 
Line 111 of Page.php
Page_Controller->SendContactForm(Array,Form,SS_HTTPRequest) 
Line 329 of Form.php
Form->httpSubmission(SS_HTTPRequest) 
Line 143 of RequestHandler.php
RequestHandler->handleRequest(SS_HTTPRequest) 
Line 161 of RequestHandler.php
RequestHandler->handleRequest(SS_HTTPRequest) 
Line 147 of Controller.php
Controller->handleRequest(SS_HTTPRequest) 
Line 199 of ContentController.php
ContentController->handleRequest(SS_HTTPRequest) 
Line 67 of ModelAsController.php
ModelAsController->handleRequest(SS_HTTPRequest) 
Line 282 of Director.php
Director::handleRequest(SS_HTTPRequest,Session) 
Line 125 of Director.php
Director::direct(/candidates/UploadCV) 
Line 127 of main.php

I have done some searching around and cant find any answers... does anyone know how to fix this issue?

Thanks!

Avatar
lozhowlett

Community Member, 149 Posts

2 December 2011 at 11:38pm

Ps, it works fine with .doc, .pdf, .jpg. Thanks,

Avatar
swaiba

Forum Moderator, 1824 Posts

2 December 2011 at 11:48pm

that is because when using attachFile you are not specficy the 3rd argument of the mime type and silverstripe doesn't have access to an entry for docx

$ext = //get file extenstion
if ($ext == 'docx') {
	$filetype = 'application/msword';
}
else {
	$filetype = HTTP::getMimeType($filename);
}
$email->attachFile($filename,$filename, $filetype);

Avatar
willmorgan

Community Member, 11 Posts

14 December 2011 at 12:37am

Edited: 14/12/2011 12:37am

Actually the true source of the problem, that can be fixed without any hacks to the core, is by updating your /etc/mime.types file.

If you open that you'll probably see:

application/msword                     doc

You just need to add docx next to doc, like so:

application/msword                     doc docx

Then restart Apache.

Avatar
lozhowlett

Community Member, 149 Posts

24 September 2012 at 8:10pm

HI everyone

A few months later and I am now getting this error for PDFs??

I have tried


if ($ext == 'docx') { 
                           $filetype = 'application/msword'; 
                        } 
                        else if ($ext == 'pdf') {
                            $filetype = 'application/pdf'; 
                        } else { 
                           $filetype = HTTP::getMimeType($_FILES["CVAttchment"]["tmp_name"]); 
                        } 

But its not working?

Notice] Undefined index: pdf
POST /job-details/ContactForm

Line 451 in /var/sites/p/pytec.co.uk/public_html/sapphire/email/Mailer.php

Trace

getMimeType(TF_logo.pdf)
Line 389 of Mailer.php
encodeFileForEmail(Array)
Line 116 of Mailer.php

Avatar
lozhowlett

Community Member, 149 Posts

24 October 2012 at 8:22pm

*bump